Moo*_*oon 1 apache mod-rewrite urlencode special-characters
我正在使用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
Run Code Online (Sandbox Code Playgroud)
现在这些正在传递的变量
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
Run Code Online (Sandbox Code Playgroud)
它让我定义规则,但当我点击我的链接时,我得到 404未找到错误"在此服务器上找不到请求的URL/wallz/Characters&Supers.html."
问题:做什么?
我的猜测是我不应该在.htaccess里面做HTML URL编码
你的猜测是正确的.当URL到达mod_rewrite进行处理时,Apache已经为您解码了URL.因此,如果要检查任何其他编码的字符,则需要使用它们的文字表示.
由于空格在此处用作分隔符,因此您还需要转义空格:
RewriteRule ^Characters\ &\ Supers\.html$ papers.php?f=%0&of=0&s=Newest
Run Code Online (Sandbox Code Playgroud)
我相信使用引号也会起作用,所以以下内容应该是等效的(尽管它未经测试):
RewriteRule "^Characters & Supers\.html$" papers.php?f=%0&of=0&s=Newest
Run Code Online (Sandbox Code Playgroud)
关于Apache解码过程的最后一点是它会自动删除多个斜杠.虽然与您的示例无关,但它是在达到mod_rewrite规则之前如何转换URL的另一个示例.