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

时间:2017-12-21 12:49:15

标签: wordpress .htaccess redirect

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

我在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]

2 个答案:

答案 0 :(得分:0)

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

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

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

由于您要重定向的所有网址都以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

答案 1 :(得分: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]