RewriteCond REQUEST_URI 不匹配整个路径
RewriteCond REQUEST_URI not match whole path
我很纳闷
我的目标是检测是否需要重定向(路径已更改)。这是一个最小的例子。
RewriteRule ^first$ second
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ / [R=301,L]
我请求 example.com/first
的目的是 301 to second
。
问题是,RewriteCond 的计算结果总是为真并创建一个循环。
第一次去,没问题。但是在第二个请求中,现在是 example.com/second
,它再次评估为真,即使 %{REQUEST_URI}
是 /second
并且 </code> 是 <code>second
。我知道它是..我通过重定向到附加了两个变量的 URL 来检查。
知道我错过了什么吗?
请记住这里的 2 个重要事实:
mod_rewrite
规则 运行 在一个循环中,只有在没有成功执行规则时才会停止
%{REQUEST_URI}
的值在重写或重定向后发生变化。
查看你的规则,你的第二个重定向规则是错误的,因为你不能在 RewriteCond
的值部分使用 %1
或
,因此它总是 return true due否定。
我很纳闷
我的目标是检测是否需要重定向(路径已更改)。这是一个最小的例子。
RewriteRule ^first$ second
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ / [R=301,L]
我请求 example.com/first
的目的是 301 to second
。
问题是,RewriteCond 的计算结果总是为真并创建一个循环。
第一次去,没问题。但是在第二个请求中,现在是 example.com/second
,它再次评估为真,即使 %{REQUEST_URI}
是 /second
并且 </code> 是 <code>second
。我知道它是..我通过重定向到附加了两个变量的 URL 来检查。
知道我错过了什么吗?
请记住这里的 2 个重要事实:
mod_rewrite
规则 运行 在一个循环中,只有在没有成功执行规则时才会停止%{REQUEST_URI}
的值在重写或重定向后发生变化。
查看你的规则,你的第二个重定向规则是错误的,因为你不能在 RewriteCond
的值部分使用 %1
或 ,因此它总是 return true due否定。