【问题标题】:301 redirect directory with query parameters带有查询参数的 301 重定向目录
【发布时间】:2013-12-11 22:16:26
【问题描述】:

我想将 /bar/ 中的所有内容重定向到一个新的子域,但仍会从原始 URL 传递任何查询参数。例如

原始网址示例:

  1. http://www.foo.com/bar/
  2. http://www.foo.com/bar/index.php
  3. http://www.foo.com/bar/index.html
  4. http://www.foo.com/bar/test.php?id=123&utm_source=google

应该重定向到:

  1. http://bar.foo.com/
  2. http://bar.foo.com/
  3. http://bar.foo.com/
  4. http://bar.foo.com/?id=123&utm_source=google

这是我目前拥有的:

RewriteEngine On
RewriteRule ^bar/?(.*)$ https://bar.foo.com/? [R=301,L]

但是,它没有传入我在上面第 4 个示例中需要的查询参数。我知道? 会阻止传入查询参数,因此我认为这很可能需要删除,但不确定用什么替换它?

干杯

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite http-status-code-301


    【解决方案1】:

    像这样添加新规则:

    RewriteEngine On
    
    RewriteRule ^bar(/|$) https://bar.foo.com/ [NC,R=301,L]
    

    QUERY_STRING 将自动转移到目标 URI。

    确保目标 URI 中没有尾随 ?,它会去除现有的查询字符串。

    【讨论】:

    • 谢谢 我现在就试试。抱歉,我的意思不是要包含实际域,请您编辑您的答案吗?
    • 谢谢。 http://www.foo.com/bar/index.php 传入 /index.php,因此它重定向到 bar.foo.com/index.php。我只需要传入查询参数。
    • 另外,第四个例子似乎传入/test.php 而不是/?id=123&utm_source=google 例如https://bar.foo.com/test.php 而不是http://bar.foo.com/?id=123&utm_source=google
    • 抱歉,您可能在我发表评论时更新了您的答案。我用htaccess.madewithlove.be顺便测试一下。
    • 好吧,不要在那里测试它,因为它不可靠。直接在您的网络服务器上尝试上次更新的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2014-01-06
    • 2020-10-20
    相关资源
    最近更新 更多