2

相关 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

但是唉,规则永远不匹配,似乎 RewriteRule没有看到双斜杠,即使双斜杠在and中保留了。%{THE_REQUEST}%{REQUEST_URI}

所以我写了一个规则:

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

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

所有这一切都非常令人不安,因为我认为 RewriteRule 对 %{REQUEST_URI} 有效,但事实证明它没有,它适用于其他东西(双斜杠剥离版本..?)

我的问题真的是,如果不是原始的 %{REQUEST_URI} 那么 RewriteRule 依赖什么?

4

1 回答 1

0

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

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

似乎正在尝试匹配这样的 URL:

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

或像这样:

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

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

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

它应该工作。

编辑:

真正的答案

Apache 删除空路径段

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

于 2010-12-23T22:00:37.653 回答