永久重定向特定URL查询字符串

问题描述 投票:1回答:2

我在网站上搜索,但我找不到确切的答案。

我在wordpress网站上有多个网址,其中包含不同的参数:

http://www.example.com/folder/?filter_color=353&orderby=price-desc
http://www.example.com/folder/?filter_material=345&orderby=date
http://www.example.com/folder/?filter_size=43&price-asc

我需要永久性地将所有这些重定向到http://www.example.com/folder/

用htaccess可以吗?谢谢!

编辑1:我尝试使用此代码,但它不起作用。我想重定向那些旧的URL,因为它们导致找不到任何页面。因此,在我复制此代码并保存htaccess后,没有任何变化。找不到任何内容页面,并且旧的URL将显示在浏览器中。所以它什么都不做。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/folder$
RewriteCond %{QUERY_STRING} ^filter_material=([0-9]*)$
RewriteRule ^(.*)$ http://www.example.com/folder/ [R=301,L]

编辑2:我终于用这段代码实现了我想要的东西:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} ^filter_([\w]*) [NC]
RewriteRule ^folder/$ http://www.example.com/folder/? [R=301,NE,NC,L]
wordpress .htaccess redirect
2个回答
0
投票

查询字符串的重写条件是regular expression,它是用于匹配搜索模式的工具。

您正在使用的正则表达式 - ^filter_material=([0-9]*)$将匹配具有以filter_material=开头的查询字符串的URL,后跟任意数量的数字。

但是,您要重定向的URL在此处不匹配,因为它还包含&orderby=date,它不是所有数字。

由于您要重定向的所有URL都以filter_开头,因此您只需使用匹配任何以该字符串开头的字符串的正则表达式,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/folder/?$
RewriteCond %{QUERY_STRING} ^filter_.+$
RewriteRule ^(.*)$ http://www.example.com/folder/ [R=301,L]

句号表示“任何字符”,加号表示“无,一个或多于一个”。

请注意,我还将/?添加到请求URI的重写条件中,这意味着“文件夹之后可能存在或不存在斜杠”。

你可以在这里测试这个重写规则:http://htaccess.mwl.be?share=2329d6f6-4fd5-5ff2-9035-a1957a242a42


0
投票

我终于用这段代码实现了我想要的东西:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} ^filter_([\w]*) [NC]
RewriteRule ^folder/$ http://www.example.com/folder/? [R=301,NE,NC,L]
© www.soinside.com 2019 - 2024. All rights reserved.