2015-03-30 57 views
1

好的,情況就是這樣。我有example.com/old-url.php,作爲一個例子,我最終想成爲example.com/new-url/是否有正確的處理301重定向和URL重寫的順序?

因爲我做這爲整個網站的多個頁面,我首先刪除PHP擴展和力量尾隨斜線所有請求,就像這樣:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 

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

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

對於某些網頁,這是所有需要。對於其他頁面,例如上面的示例,我需要再走一步。所以我老url.php重命名爲新url.php,並創建一個額外的301重定向,像這樣:

Redirect 301 /old-url/ http://www.example.com/new-url/ 

但是,這是正確的方式做到這一點?是否更好的做法是做一些類似的事情:

Redirect 301 old-url.php http://www.example.com/new-url.php 

只需將301之前的URL重新寫入?甚至:

Redirect 301 old-url.php http://www.example.com/new-url/ 

好像有幾種方式我可以設置這個了,我只是想知道,如果它真的很重要或者是最佳的。

在此先感謝。

回答

1

在內部路由規則之前應該保持外部重定向。將mod_rewrite規則與mod_alias規則混合也不是一個好主意。

這是正確的順序:

RewriteRule ^old-url/?$ /new-url/ [L,NC,R=301] 

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule ^(.+?)\.php$ /$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

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