2014-01-10 159 views
2
RewriteEngine On 
RewriteCond %{HTTP_HOST} !.com$ //redirect from .net and .org to .com 
RewriteRule .* http://www.domain.com%{REQUEST_URI} [R=301] 
RewriteCond %{HTTP_HOST} !^www\. [NC] //Always use www. 
RewriteRule ^/(.*)$ http://www.%1/$1 [R=301] 
RewriteRule ^/?article-(.*)$ article.php?id=$1 [L,QSA,NC] // redirect article-x to article.php?id=x 
RewriteRule ^/?page-(.*)$ page?p=$1 [L,QSA,NC]// redirect page-x to page.php?p=x 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] // add the .php to every request if the file type is missing 

除了添加www以外,所有規則都可以正常工作。到網址。例如​​3210 並不重定向到http://www.domain.com/page-1重寫規則組合不起作用

回答

1

%1指的是在前述RewriteCond()捕獲的圖案。您尚未在RewriteCond中捕捉到任何圖案。相反,您可以在RewriteRule中使用%{HTTP_HOST}

如果這些規則駐留在.htaccess中,RewriteRule將不包含前導/,因此如果您的模式不匹配,將永遠不匹配。取出/和匹配^(.*)$

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301] 

邊注:不要忘了逃跑的..com。它會工作不正常,但表達並不意味着你字面上的意思。

RewriteCond %{HTTP_HOST} !\.com$ 

全套重寫一起應該像下面的(我已刪除了所有領先//?表達式)。我已經測試了所有這些工作在我自己的系統上。

RewriteEngine On 
RewriteCond %{HTTP_HOST} !\.com$ [NC] 
#Use a capture group here, add [L] 
RewriteRule (.*) http://www.example.com/$1 [L,R=301] 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301] 

RewriteRule ^article-(.*)$ article.php?id=$1 [L,QSA,NC] 
RewriteRule ^page-(.*)$ page?p=$1 [L,QSA,NC] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 
+0

.net到.com重定向工作正常,但我仍然可以訪問網站沒有www。 – nullException

+0

這是在.htaccess中還是在'VirtualHost'配置中? –

+0

.htaccess在我的主機 – nullException