Mod_rewrite不适用于以%开头的网址(百分号)

时间:2009-04-09 15:09:00

标签: .htaccess mod-rewrite symbols pagerank

有几个链接指向我管理的网站,网站管理员错误地在域名和网页名称之间包含空格

    www.domain.com/ page.html

当用户点击时,会显示

    www.domain.com/%20page.html

我想使用mod_rewrite将匹配重定向到错误的地址到正确的地址,但我的重写规则无法正常工作。我没有成功尝试以下内容:

    rewriterule ^\%20page.html$ /page.html [R=301,L]
    rewriterule ^.20page.html$ /page.html [R=301,L]

如何写一条规则来抓住这个地址?我想保留PageRank并且不会因链接断开而受到惩罚,我无法让网站管理员修复他的链接

3 个答案:

答案 0 :(得分:7)

使用字面空格,使用反斜杠进行转义,因此它不会结束正则表达式:

RewriteRule ^\ page.html$ /page.html [R=301,L]

答案 1 :(得分:2)

将空间放在RewriteRule中。可能在mod_rewrite看到它的时候,它已经被解码了。

答案 2 :(得分:0)

您可以使用以下内容删除所有控制字符:

RewriteRule ^([^\x00-\x19\x7F]*)[\x00-\x19\x7F]+(.*) /$1$2 [L,R=301]

还有你的额外空间角色:

RewriteRule ^([^\x00-\x20\x7F]*)[\x00-\x20\x7F]+(.*) /$1$2 [L,R=301]