我们刚刚为客户建立了一个新网站,并且出于 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]
多谢你们。