RedirectMatch 301 删除查询字符串/URL 参数

Posted

技术标签:

【中文标题】RedirectMatch 301 删除查询字符串/URL 参数【英文标题】:RedirectMatch 301 remove query string / URL Parameters 【发布时间】:2022-01-22 20:28:41 【问题描述】:

我需要解决 google 搜索控制台错误链接和 RedirectMatch 301 删除我的 htaccess 中的查询字符串/URL 参数:

Google Search Console 链接:

https://www.domain.de/?main_page=index&zenid=umf5etlrmr4blnuiq0e4jsp6l2&cPath=15_326&sort=20a&alpha_filter_id=68

https://www.domain.de/index.php?main_page=product_reviews_write&products_id=9985&cPath=5_380&number_of_uploads=0

https://www.domain.de/?main_page=index&cPath=46_47&sort=20a&alpha_filter_id=70

https://www.domain.de/?currency=USD&main_page=products_new&disp_order=7&page=141

https://www.domain.de/?main_page=index&zenid=mj6nsb9r53goiu6e13nb80tfq7&cPath=1_160&sort=20a&alpha_filter_id=70

https://www.domain.de/?currency=USD&main_page=index&cPath=3_137

https://www.domain.de/?main_page=index&cPath=46_76&sort=20a&alpha_filter_id=84

https://www.domain.de/?main_page=index&cPath=5_6&sort=20a&alpha_filter_id=85

https://www.domain.de/index.php?main_page=index

还有更多。

我在 htaccess 中测试过这种方式,但没有成功:

RedirectMatch 301 ^/?main_page*$ https://www.domain.de/
RedirectMatch 301 ^/?main_page\=$ https://www.domain.de/

RewriteEngine on
RewriteCond %QUERY_STRING ^main_page$ [NC]
RewriteRule ^/?main_page?$ https://www.domain.de/ [L,R=301]

【问题讨论】:

RedirectMatch 和 RewriteRule 都只匹配 URL 的 path 组件。并且您的 RewriteCond 尝试匹配由 only main_page 组成的查询字符串。 啊好吧,正确的方法是什么? 如果您只想在任何地方匹配任何包含main_page 的查询字符串 - 然后不要在开始和结束处锚定 RewriteCond 模式。而在 RewriteRule 中仅匹配根的路径将只是一个空路径,所以 ^$ 【参考方案1】:

您可以使用以下通用规则来删除查询字符串

RewriteEngine On


RewriteCond %QUERY_STRING ^(main_page|currency) [NC]
RewriteCond %REQUEST_URI ^/$ [OR]
RewriteCond %REQUEST_URI ^/index\.php$ [NC]
RewriteRule ^ %REQUEST_URI? [L,R=301]

【讨论】:

【参考方案2】:

在此处添加另一种 htaccess 规则方法,按照所示示例编写。在这里使用 Apache 的 THE_REQUEST 变量。

确保在测试您的 URL 之前清除浏览器缓存。

RewriteEngine ON
RewriteCond %THE_REQUEST \s/(?:index\.php)?/?(?:\?(?:main_page|currency))?\s [NC]
RewriteRule ^ %REQUEST_URI? [L,R=301]

OR 作为替代使用以下代码(在此处使用 QSD 标志来删除查询字符串):

RewriteEngine ON
RewriteCond %THE_REQUEST \s/(?:index\.php)?/?(?:\?(?:main_page|currency))?\s [NC]
RewriteRule ^ %REQUEST_URI [L,R=301,QSD]

【讨论】:

以上是关于RedirectMatch 301 删除查询字符串/URL 参数的主要内容,如果未能解决你的问题,请参考以下文章

从 301 重定向中删除查询字符串

htaccess 301 重定向 - 删除查询字符串 (QSA)

是否可以使用RedirectMatch有条件地重定向URL?

如何在 apache 2.4 的 url 中删除双斜杠//?

使用查询 .htaccess 重定向单个 url

HTACCESS-重定向并删除所有查询字符串