htaccess-使用文字符号时如何考虑空格字符?

htaccess-使用文字符号时如何考虑空格字符?

root.com/index rel如果我有一个被编码的URL,root.com/index%20rel我该如何使用 htaccess 文字符号来定位它?

=表示字面意义上的国家。所以我做了类似的事情

RewriteCond %{REQUEST_URI} =index rel
RewriteRule .* / [L,R=302,]

但是 htaccess 认为空格会使事物成为一个额外的参数而不是同一参数的一部分。

逃跑似乎行不通

答案1

当使用字典顺序/文字比较(即=运算符)时,你可以将整个条件模式如果字符串包含空格,则用双引号引起来。例如:

RewriteCond %{REQUEST_URI} "=index rel"

(该REQUEST_URI变量已经百分比解码。)

但是,该条件仍然不匹配,因为REQUEST_URI变量以斜杠开头(与匹配的 URL 路径不同)RewriteRule 图案)。因此,您需要:

RewriteCond %{REQUEST_URI} "=/index rel"

但是,正如 Unbeliever 所建议的,如果可能的话,您应该在RewriteRule 图案(如果您喜欢这种语法,也可以用双引号括起来)。RewriteRule首先处理模式,因此在那里执行您可以执行的操作比在状况


更新:在 Apache 2.2 (Windows 和 Linux) 和 Apache 2.4 (Windows) 上测试的工作示例:

RewriteCond %{REQUEST_URI} "=/foo bar"
RewriteRule ^ /baz [R=302,L]

的请求/foo%20bar被重定向至/baz

答案2

RewriteCond我很确定使用词汇比较(与 PCRE 相反)时目标模式中不能有空格,因为我认为“转义”是 PCRE 解释的内容。此外,由于 aRewriteRule与请求 URI 匹配,因此您不需要 a。请改用以下内容:

重写规则 ^index\ rel$ / [L,R=302]

相关内容