2009-04-09 31 views
2

有指向一个网站,我管理,其中站长误包括域名和页面名称之间的空间几个环节:mod_rewrite的不为%开头的URL(百分号)工作

 
    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,不会因为断开的链接而受到惩罚,而且我无法让网站管理员修复其链接。

+0

您有网站管理员不能修复损坏的链接吗?这似乎是一个非常糟糕的情况。 – acrosman 2009-04-09 15:13:41

+0

如果链接被破坏,我怀疑你有一个PageRank,所以修复链接。如果您的网站管理员无法解决问题,那是一个主要问题。这是他的工作,也是他不可原谅的,他以这种方式写在第一位... – rmeador 2009-04-09 15:21:10

回答

2

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

7

使用文字空间,用反斜杠转义,因此并没有结束的正则表达式:

RewriteRule ^\ page.html$ /page.html [R=301,L] 
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]