检测request_uri中的双斜杠(空参数)

时间:2010-12-23 21:53:14

标签: apache mod-rewrite double slash

相关 1 2 3

但这个问题略有不同。

说我有一个像RewriteRule:

RewriteRule ^test/([\w]*)/([\w]*)/([\w]*)/?$ go.php?q=THREE_$1_$2_$3

因此http://localhost/test/a/b/c会被重写为http://localhost/go.php?q=THREE_a_b_c

现在说我想明确地捕捉中间参数被省略的情况和双斜杠结果,如http://localhost/test/a//c

所以我写了一条规则:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

但是ALAS ,规则永远不会匹配,看起来RewriteRule 看不到双斜杠,即使保留了双斜杠 %{THE_REQUEST}%{REQUEST_URI}

所以我写了一条规则:

RewriteCond %{REQUEST_URI} //
RewriteRule ^test/([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(NONE)_$2

有效,因为RewriteCond仅适用于REQUEST_URI中有双斜杠的情况。但正如你所看到的,我仍然必须假设在使用正则表达式进行语法分析时没有双斜杠。

所有这一切都非常令人不安,因为我认为RewriteRule在%{REQUEST_URI}上工作,但事实证明它,它适用于其他东西(双斜杠剥离版本??)< / p>

我的问题是,如果不是原始%{REQUEST_URI}那么RewriteRule会以什么为依据?

1 个答案:

答案 0 :(得分:0)

不确定这一点,但是你的第二条规则是:

RewriteRule ^test/([\w]*)//([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

似乎试图匹配这样的网址:

http://localhost/test/a//b/c

或者像这样:

http://localhost/test/a///c

如果您将第二条规则更改为:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

它应该有用。

编辑:

真实的answer

  

Apache删除空路径段

现在我知道问题不只是一个不正确的正则表达式,我搜索了答案。