Apache-2.2

mod_rewrite 問題(可能與特殊字元有關?)

  • September 26, 2011

我們剛剛為客戶創建了一個新網站,出於 SEO 的目的,我們設置了一個巨大的 urlmap 設置來將舊網站的 URL 重寫到新網站上的相關位置。

技術細節如下:

CentOS 5.6 
Apache 2.2
mod_rewrite
PHP 5.3.8

這是 mod_rewrite 塊:

RewriteMap urls txt:/www/sites/domain.co.uk/etc/urlmap.txt
RewriteCond %{REQUEST_URI}      ^(.*)$
RewriteCond ${urls:%1|NONE} ^(.*)?$
RewriteCond %1  !NONE
RewriteRule .*  %1 [R=301,NS,QSA,L]

一些重定向確實有效,例如:

www.domain.co.uk/store/SEURLF/ASP/SFS/PP.Y/RID.577/SFE/Diaries.htm重定向正確。

www.domain.co.uk/store/SEURLF/ASP/SFS/CATID.1/FORMAT.STUDENT%2FSCHOOL+WEEK+TO+VIEW/ACADEMIC.1/SFE/diaries.htm沒有,404s。這裡唯一的區別是“+”符號。這也不會出現在重寫日誌中,就像由於特殊字元而被 mod_rewrite 完全忽略一樣。

另一個奇怪的情況是,例如:

www.domain.co.uk/store/diaries.asp?catid=3 - 沒有正確重寫,查看 Apache 重寫日誌它完全忽略了查詢“ ?catid=3 ”出於某種原因。

我不是 mod_rewrite 方面的專家,因此我將不勝感激。如果您需要更多資訊,請詢問。

提前致謝!

編輯:

固定:

RewriteCond %{REQUEST_URI}\?%{QUERY_STRING}  ^(.*)$
RewriteCond ${urls:%1|NONE} ^(.*)$
RewriteCond %1  !NONE
RewriteRule .*  %1? [R=301,NS,L]

固定:

RewriteCond %{REQUEST_URI}\?%{QUERY_STRING}  ^(.*)$
RewriteCond ${urls:%1|NONE} ^(.*)$
RewriteCond %1  !NONE
RewriteRule .*  %1? [R=301,NS,L]

多謝你們。

引用自:https://serverfault.com/questions/313864