【发布时间】:2023-03-13 05:25:02
【问题描述】:
但这个问题略有不同。
假设我有一个类似的 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
BUT ALAS,规则永远不匹配,似乎 RewriteRule 没有看到双斜线,即使双斜线 保留在%{THE_REQUEST} 和 %{REQUEST_URI}。
所以我写了这样一条规则:
RewriteCond %{REQUEST_URI} //
RewriteRule ^test/([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(NONE)_$2
并且 that 有效,因为 RewriteCond 仅适用于 REQUEST_URI 中有双斜杠的情况。但是正如你所看到的,我仍然必须假设在使用正则表达式解析时没有双斜杠。
所有这一切都非常令人不安,因为我认为 RewriteRule 对 %{REQUEST_URI} 有效,但事实证明它没有,它适用于其他东西(双斜杠剥离版本..?)
我的问题是,如果不是原始的 %{REQUEST_URI},那么 RewriteRule 依赖什么?
【问题讨论】:
标签: apache mod-rewrite double slash