2010-03-23 45 views
2

所以我搬了一個網站,並試圖301重定向的一切,我經常這樣做,這是一個奇怪的問題,但可能是一些愚蠢的我'米沒有看到。htaccess重定向301問題..所有重定向一個字符串失敗重定向和404

我的所有重定向都工作正常,除了第一個字符串以「/ Dining」或「/ dining」開頭的重定向失敗。例如,這個重定向工作正常 -

Redirect 301 /healthfitness/teeth.cfm /healthcare/pretty-teeth 

...以及其他100人。

但所有這些都失敗(很多超過我所展示) -

Redirect 301 /Dining/diningreviews/vawines.cfm /shopping/wines-2004 
Redirect 301 /Dining/diningathome/carrotcake.cfm /home-garden/carrot-cake-2003 
Redirect 301 /Dining/diningathome/oldvarolls.cfm /home-garden/virginia-rolls-2003 
Redirect 301 /Dining/diningathome/pumpkincake.cfm /home-garden/pumpkin-cake-2003 

我的.htaccess文件的頂部看起來像這 -

RewriteEngine On 
RewriteBase/

#uploaded files 
RewriteRule ^(.*/)?files/$ index.php [L] 
RewriteCond %{REQUEST_URI} !.*wp-content/plugins.* 
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L] 

# add a trailing slash to /wp-admin 
RewriteCond %{REQUEST_URI} ^.*/wp-admin$ 
RewriteRule ^(.+)$ $1/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule . - [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] 
RewriteRule . index.php [L] 

<IfModule mod_security.c> 
<Files async-upload.php> 
SecFilterEngine Off 
SecFilterScanPOST Off 
</Files> 
</IfModule> 

#Everything below here are Redirect 301s 
+0

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect說:「另外,即使使用.htaccess文件,URL路徑也必須是完全限定的URL,而不是相對路徑或部分的內部。「 – artlung 2010-03-23 21:06:09

+1

此外,在舊網站上,請注意以前的開發人員可能已放入httpd.conf或可能會干擾的其他配置文件中的重定向。 – artlung 2010-03-23 21:06:50

回答

2

不要重定向陳述必須根據在目的地包含協議?

+0

我不認爲他們必須在那裏。我的重定向95%正在這個特定的網站上工作 – Marty 2010-03-23 20:53:22

+1

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect說:「另外,URL路徑必須是完全限定的URL,而不是相對的路徑,即使使用.htaccess文件或部分。「 – artlung 2010-03-23 21:05:08

0

您必須在重定向中包含域名。

切勿在同一個文件中混用mod_alias和mod_rewrite指令。如果您爲任何規則使用RewriteRule,則必須使用RewriteRule(而不是RedirectRedirectMatch)滿足您的所有規則。

在任何重寫之前(使用RewriteRule語法)列出所有重定向(使用RewriteRule語法),否則將無意中將重寫的指針作爲新URL在Web上重新顯示。

您目前使用的代碼效率非常低。 .*模式意味着您的.htaccess文件將嘗試針對每個到服務器的URL請求進行數十萬次「回退和重試」試用匹配。

尤其

^(.\*/)?^([^/]+/)\*在兩個地方進行更換。

^.\*/應由^/([^/]+/)\*

!.\*wp-content/plugins.\*替換應由!wp-content/plugins

^([_0-9a-zA-Z-]+/)?(.\*\\.php)$替換應由^([_0-9A-Z-]+/)?([^.]+\\.php)$被替換爲[NC]標誌也加入。

「將斜線添加到/ wp-admin」重定向應該是文件中的第一個規則集,目標URL應包含協議和域名。該規則應立即採用非www到www規範化規則。

新代碼運行速度可能會快上百倍。