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 个重要事实:

  1. mod_rewrite 规则 运行 在一个循环中,只有在没有成功执行规则时才会停止
  2. %{REQUEST_URI} 的值在重写或重定向后发生变化。

查看你的规则,你的第二个重定向规则是错误的,因为你不能在 RewriteCond 的值部分使用 %1,因此它总是 return true due否定。