.htaccess 重定向规则随机删除斜杠

xkrw2x1b  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(119)

由于某种原因,在某些规则上/被删除了。我有更多的规则,但在这种情况下,第一个规则可以正常工作,但第二个规则可能在规则列表的任何地方,重定向到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
j2cgzkjk

j2cgzkjk1#

您可能有一个“catch-all”Redirect指令缺少尾部斜杠。
例如,如果在规则的末尾有以下内容:

Redirect 301 / https://www.example.com

请注意目标URL上缺少的尾随斜杠。
然后,对/not-working-url的请求将被上述规则“错误地”重定向到https://www.example.comnot-working-url
Redirect指令是前缀匹配,匹配之后的所有内容都被复制到目标URL的末尾。(在匹配的初始/之后)复制到https://www.example.com的末尾。使用Redirect指令,源URL和目标URL上的尾部斜杠几乎总是匹配的,否则您可能会在重定向响应中看到缺少的斜杠或双斜杠。

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

RewriteRule指令删除了/en前缀(当查询字符串存在时),因此后面的Redirect指令将不匹配。

相关问题