【问题标题】:Apache: mod_rewrite: Spcaes & Special Characters in URL not workingApache:mod_rewrite:URL 中的空格和特殊字符不起作用
【发布时间】:2011-05-12 01:39:00
【问题描述】:

我正在使用 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 有时有带有空格和特殊字符的值,我无法避免这种情况,因为数据库已经在-place 以及我正在重写的所有 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 错误“在此服务器上找不到请求的 URL /wallz/Characters & Supers.html。”

问题:怎么办?

我的猜测是我不应该在 .htaccess 中进行 HTML URL 编码

【问题讨论】:

  • 来吧,伙计们,这对我来说是 911 .. 我需要在早上第一件事工作

标签: apache mod-rewrite special-characters urlencode


【解决方案1】:

你的猜测是正确的。当 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 的另一个示例。

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多