由于某种原因,在某些规则上/被删除了。我有更多的规则,但在这种情况下,第一个规则可以正常工作,但第二个规则可能在规则列表的任何地方,重定向到https://www.example.comnot-working-url
而不是https://www.example.com/not-working-url
。如果这对所有规则都发生,可能会更有意义,但它只对一些URL这样做。为什么会这样?
RewriteEngine On
RewriteCond %{QUERY_STRING} .
RewriteRule ^en/(.*) /$1 [L,NE,R=301]
Redirect 301 /en/working-url https://www.example.com/working-url
Redirect 301 /en/not-working-url https://www.example.com/not-working-url
1条答案
按热度按时间j2cgzkjk1#
您可能有一个“catch-all”
Redirect
指令缺少尾部斜杠。例如,如果在规则的末尾有以下内容:
请注意目标URL上缺少的尾随斜杠。
然后,对
/not-working-url
的请求将被上述规则“错误地”重定向到https://www.example.comnot-working-url
。Redirect
指令是前缀匹配,匹配之后的所有内容都被复制到目标URL的末尾。(在匹配的初始/
之后)复制到https://www.example.com
的末尾。使用Redirect
指令,源URL和目标URL上的尾部斜杠几乎总是匹配的,否则您可能会在重定向响应中看到缺少的斜杠或双斜杠。RewriteRule
指令删除了/en
前缀(当查询字符串存在时),因此后面的Redirect
指令将不匹配。