我很困惑。
我的目标是检测是否需要重定向(路径已更改)。这是一个最小的例子。
RewriteRule ^first$ second
RewriteCond %{REQUEST_URI} !^/$1$
RewriteRule ^(.*)$ /$1 [R=301,L]
我正在请求example.com/first
,意在获得301 to second
。
问题是,RewriteCond始终求值为true并创建一个循环。
第一次尝试就可以了。但是,在第二个请求(现在为example.com/second
)上,即使%{REQUEST_URI}
是/second
并且$1
是second
,它也会再次为true。我知道是的。我通过重定向到附加了两个变量的URL进行检查。
知道我想念什么吗?
答案 0 :(得分:2)
请在这里记住2个重要事实:
mod_rewrite
规则在循环中运行,仅在没有成功执行规则时才会停止%{REQUEST_URI}
的值在重写或重定向后发生更改。查看您的规则,由于您无法在%1
的值部分中使用$1
或RewriteCond
,因此第二重定向规则是错误的,因此由于取反,它总是返回true。