首页 > 解决方案 > RewriteCond REQUEST_URI 不匹配整个路径

问题描述

我很困惑。

我的目标是检测是否需要重定向(路径已更改)。这是一个最小的例子。

RewriteRule ^first$ second

RewriteCond %{REQUEST_URI} !^/$1$
RewriteRule ^(.*)$ /$1 [R=301,L]

我请求example.com/first有意得到301 to second.

问题是, RewriteCond 总是评估为 true 并创建一个循环。第一次去,还好。但是在第二个请求时,即 now example.com/second,它再次评估为 true,即使%{REQUEST_URI}is/second$1is 也是如此second。我知道它是..我通过重定向到附加了两个变量的 URL 进行了检查。

知道我错过了什么吗?

标签: regexapache.htaccessmod-rewriteserver-variables

解决方案


请记住这里的两个重要事实:

  1. mod_rewrite规则循环运行,只有在没有成功执行规则时才停止
  2. %{REQUEST_URI}重写或重定向后更改的值。

查看您的规则,您的第二个重定向规则是错误的,因为您不能使用%1$1在 value 部分中,RewriteCond因此由于否定而使其始终返回 true。


推荐阅读