【问题标题】:Permanent redirect specific url query string永久重定向特定 url 查询字符串
【发布时间】:2018-06-04 03:44:01
【问题描述】:

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

我在 wordpress 网站中有多个 url,具有不同的参数,如下所示:

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: 我尝试使用此代码,但它不起作用。我想重定向那些旧网址,因为它们会导致找不到页面。因此,在我复制此代码并保存 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]

【问题讨论】:

  • 是的,这是可能的。请做一些研究,尝试自己编写 .htaccess 代码,如果遇到问题,请分享您的代码以及预期行为、观察到的行为和特定问题。
  • 对不起,我不知道该怎么做。我忘了写我只是一个wordpress“设计师”我对htaccess几乎一无所知。我希望有人可以帮助我编写代码。谢谢!
  • 好的,看看这个教程,我觉得很清楚了:simonecarletti.com/blog/2009/01/apache-query-string-redirects
  • 还有这个相关的问题:stackoverflow.com/questions/10135702/…
  • 我已将代码粘贴在原始评论中并解释了发生的情况。

标签: wordpress .htaccess redirect


【解决方案1】:

查询字符串的重写条件是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

【讨论】:

  • 帕特里克!感谢您的时间和专门的解释。我尝试改变那条线,但仍然没有任何改变。请您仔细检查每个字符是否写得很好?也许我错过了什么。谢谢!
  • 啊,请求URI丢失的条件末尾还有一个斜线。看看这个,这行得通:htaccess.mwl.be?share=7f08649c-c491-5b0c-9e96-a0fee8128516
  • 再次感谢帕特里克。但在示例中,原始 url 与结果 url 相同。 :( 也许我不清楚,我需要的是在 /folder/ 之后以 filter_ 开头的所有 url 都重定向到 example.com/folder,末尾没有任何参数或字符串。
【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 2017-06-15
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多