2010-11-18 63 views
1

我使用APACHE:mod_rewrite的定义一组规则rewritting URLS阿帕奇:mod_rewrite的:Spcaes和在URL中的特殊字符不工作

我想这个链接                                                                                                                       要被显示为

/myDIR/walls.php?f=All&of=0&s=Newest - >All.html

所以我用下面的规则

从(.htaccess)是否

RewriteEngine on 
RewriteBase /myDIR/ 
RewriteRule ^All\.html$ papers.php?f=All&of=0&s=Newest 

现在文本正在为 f=Allof=0s=Newest通过这些变量这些被用于查询,显而易见,并且这些变量之一,即f所以metimes的值与空格和特殊字符,我不能避免,因为数据库已经就地,我所有的重写网址....

现在当我尝试这样定义

我想这个链接                                                 规则3210                                                                                                                                要被显示为

/myDIR/walls.php?f=Characters & Supers&of=0&s=Newest - >Characters & Supers.html

这是不对的,我知道,因为不应该有任何空格..所以作出正确选择我这样定义

RewriteRule ^Characters%20%26%20Supers\.html$ papers.php?f=Characters%20%26%20Supers&of=0&s=Newest 

它让我定义规则的规则,但是当我点击我的链接我得到 404未找到错误“请求的URL/wallz /字符& Supers.html在此服务器上未找到。”

问题:该怎么办?

我的猜测就是我不应该做的HTML URL编码内的.htaccess

+0

来吧家伙这是我的911 ..我需要这个工作第一件事在早上 – Moon 2010-11-18 14:24:49

回答

5

你的猜测是正确的。当URL到达mod_rewrite进行处理时,Apache已经为您解码了URL。因此,如果你想检查任何其他编码的字符,你需要使用它们的文字表示。

由于空格在这里被用作一个分隔符,你也想需要逃避你的空间:

RewriteRule ^Characters\ &\ Supers\.html$ papers.php?f=%0&of=0&s=Newest 

我相信使用引号也将工作,所以下面应该是等价的(虽然它是未经测试):

RewriteRule "^Characters & Supers\.html$" papers.php?f=%0&of=0&s=Newest 

关于Apache解码过程的最后一点是它会自动为您删除多个斜线。虽然与您的示例无关,但它是在达到mod_rewrite规则之前如何转换URL的另一个示例。