代码之家  ›  专栏  ›  技术社区  ›  Moon

Apache:mod_rewrite:Spcaes&URL中的特殊字符不起作用

  •  1
  • Moon  · 技术社区  · 15 年前

    我使用APACHE:mod_rewrite来定义一组重写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=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未找到错误“在此服务器上找不到请求的URL/wallz/Characters&Supers.html。”

    问题: 怎么办?

    我猜我不应该在里面做HTML URL编码

    1 回复  |  直到 15 年前
        1
  •  5
  •   Tim Stone    15 年前

    你的猜测是正确的。当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_重写规则之前如何转换URL。

    推荐文章