mod_rewrite 的问题(可能与特殊字符有关?)

mod_rewrite 的问题(可能与特殊字符有关?)

我们刚刚为客户建立了一个新网站,并且出于 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没有,还有 404。这里唯一的区别是“+”符号。这也没有出现在重写日志中,就像它因为特殊字符而被 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]

答案1

已修复:

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

多谢你们。

相关内容