我在网站上搜索,但我找不到确切的答案。
我在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]
查询字符串的重写条件是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
我终于用这段代码实现了我想要的东西:
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]