RewriteCond REQUEST_URI与整个路径不匹配

时间:2019-12-11 18:50:40

标签: regex apache .htaccess mod-rewrite server-variables

我很困惑。

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

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并且$1second,它也会再次为true。我知道是的。我通过重定向到附加了两个变量的URL进行检查。

知道我想念什么吗?

1 个答案:

答案 0 :(得分:2)

请在这里记住2个重要事实:

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

查看您的规则,由于您无法在%1的值部分中使用$1RewriteCond,因此第二重定向规则是错误的,因此由于取反,它总是返回true。