我正在使用APACHE:mod_rewrite来定义一组用于重写URLS的规则
我希望此链接显示为
/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=All
of=0
s=Newest
这些用于查询,显然和其中一个变量,即f
有时会包含空格和特殊字符的值,我不能避免这种情况,因为数据库已经就位,所有我正在重写URL ....
现在我尝试定义像这样的规则
我希望此链接显示为
/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 Not Found Error“在此服务器上找不到请求的URL / wallz / Characters& Supers.html。”
问题:该怎么做?
我的猜测是我不应该在.htaccess
中进行HTML URL编码答案 0 :(得分: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的另一个示例。