如果我有一个URL root.com/index rel被编码为root.com/index%20rel我如何使用htaccess文字符号来定位它?
=表示文字的国家。 所以我做这样的事情
RewriteCond %{REQUEST_URI} =index rel RewriteRule .* / [L,R=302,]
但是htaccess认为空间使得事物成为一个额外的参数,而不是同一个参数的一部分。
转义似乎不起作用
当使用字典/文字比较(即。 =运算符)时,如果string包含空格,则可以将整个CondPattern用双引号包围。 例如:
RewriteCond %{REQUEST_URI} "=index rel"
( REQUEST_URIvariables已经被百分比解码了。)
但是,该条件仍然不匹配,因为REQUEST_URIvariables以斜杠开始(与由RewriteRule 模式匹配的URLpath不同)。 所以,你需要:
RewriteCond %{REQUEST_URI} "=/index rel"
但是,正如非信徒所build议的,如果可能的话,应该在RewriteRule 模式中匹配这个URLpath(如果你喜欢这种语法,你也可以用双引号括起来)。 RewriteRule模式首先被处理,所以在那里做你能做的事情更有效率,而不是在一个条件中匹配URLpath。
更新:在Apache 2.2(Windows和Linux)和Apache 2.4(Windows)上testing的工作示例:
RewriteCond %{REQUEST_URI} "=/foo bar" RewriteRule ^ /baz [R=302,L]
/foo%20bar请求被redirect到/baz 。
我敢肯定,在使用词法比较(而不是PCRE)时,你不能在目标模式中留出空间,因为我认为“逃避”是PCRE解释的东西。 你也不需要RewriteCond因为RewriteRule与请求URI相匹配。 请改用以下内容:
RewriteRule ^ index \ rel $ / [L,R = 302]