如何防止在 301 重定向中追加参数

How to prevent append parameter in 301 redirect

我在 .htaac​​ess 文件中使用这个重定向命令。

Redirect 301 /old-path.html /new-path.html

它告诉我/new-path.html?page=old-path

概率,附加参数是我 htaccess 中某些 RewriteRule 和 RewiteCond 的结果。

我不喜欢编辑我原来的 htaccess 代码。

我发现下面的命令与结果非常接近。

RedirectMatch 301 /old-path.html /new-path.html?

结果是/new-path.html?,它只有一个额外的?

不要使用 RedirectMatch 因为它没有办法丢弃 old/previous 查询字符串。

最好使用这样的 RewriteRule:

RewriteRule ^old-path\.html$ /new-path.html? [L,R=301,NC]

目标中的尾随 ? 将丢弃任何查询字符串。

在 Apache 2.4+ 上,您还可以使用:

RewriteRule ^old-path\.html$ /new-path.html [L,R=301,NC,QSD]

作为经验法则,将所有 R=... 规则 放在您的 .htaccess 之上,然后放在其他规则之前。这将使这些规则在其他可能修改请求 URI 或查询字符串的内部重写规则之前起作用。