【问题标题】:301 redirect from URL with query string to new domain with different query string301 从带有查询字符串的 URL 重定向到具有不同查询字符串的新域
【发布时间】:2012-04-25 12:21:28
【问题描述】:

我试图弄清楚如何在我的 htaccess 文件中进行 301 重定向,以将一些文件重定向到新域。以下是我需要知道的:

旧网址:http://www.example.com/index.php?page=news&id=2366

新网址:http://www.example2.com/news.php?name=23546

重定向不必自动创建。我可以在 htaccess 文件中对需要重定向的页面进行硬编码,但我只是不知道要使用的格式,因为我读到“标准”301 重定向不适用于查询字符串。

基本上这就是我想做的,但从我目前的研究来看,这听起来不像是可以做到的。

redirect 301 /index.php?page=news&id=2366 http://www.example2.com/news.php?name=23546

【问题讨论】:

    标签: .htaccess redirect query-string http-status-code-301


    【解决方案1】:

    您可以使用带有查询字符串匹配条件的重写规则,例如:

    RewriteEngine On
    RewriteCond   %{REQUEST_URI}    ^/index.php$
    RewriteCond   %{QUERY_STRING}   ^page=news&id=2366$
    RewriteRule   ^(.*)$ http://www.example2.com/news.php?name=23546   [R=301,L]
    

    结帐this blog page 以了解有关其工作原理的更多信息。

    【讨论】:

    • 我遇到了同样的问题 - 我很好奇为什么简单的重定向 301 ... 不起作用,因为根据我所有的谷歌搜索似乎应该这样做。
    【解决方案2】:

    我也遇到了同样的问题,但还是比较复杂,因为我需要丢弃其他参数。

    像这样:my-old-page.php?a=1&b=2&c=3

    我需要使用其中一个字符串并丢弃其他字符串,但该解决方案仅在我想使用最后一个参数 (c=3) 时才有效。如果我想使用任何其他(a=1 或 b=2),它会运行到 404。经过一番挣扎和搜索,我找到了答案:

    RewriteCond %{QUERY_STRING}  ^.* ?b=2.* ?$ (without space after the *)
    
    RewriteRule (.*)  http://www.my-webpage.php/new-location-2?  [R=301,L]
    

    解决方法是在参数前后加上".*?"来使用。

    我不知道这是否是最好的解决方案,但它确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 2017-04-10
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      相关资源
      最近更新 更多