【问题标题】:HTTP redirect one URL to another based on query stringHTTP 根据查询字符串将一个 URL 重定向到另一个 URL
【发布时间】:2013-01-10 03:56:40
【问题描述】:

当请求 URL /page1.php?abc 时,我希望将其重定向到 /page1.php?xyz

具体来说,这是我想告诉客户的:

HTTP/1.1 301 Moved Permanently
Location: /page1.php?xyz

我尝试过 Apache RedirectMatch 指令,但它似乎不支持查询字符串。

是否有另一个指令支持带有查询字符串的 URL 的 HTTP 重定向?

目前我正在使用 PHP's header function 完成此操作,但这感觉像是权宜之计,因此我正在寻找 Apache 解决方案。

【问题讨论】:

  • @peterm,该页面中接受的解决方案不起作用。基本上它会重写页面,而不向客户端发送 301 重定向。这是一个完全不同的东西。
  • this question 能解决您的问题吗?
  • @Barmar,不,它和上面的一样。他们说使用 mod_rewrite(客户端将执行 1 个 HTTP 请求)作为 workaround,但这与使用 HTTP 重定向完全不同(客户端将执行 2 个 HTTP 请求,未来的请求将请求新的网址而不是旧网址)

标签: php apache redirect http-status-code-301 mod-alias


【解决方案1】:

我会创建一个自己生成的 PHP 文件,但不知道有什么 Apache 模块/解决方案可以做到这一点。

http://php.net/manual/en/function.header.php

【讨论】:

  • 我猜你在他更新他的问题说这就是他目前正在做的事情之前发布了这个答案。
【解决方案2】:

您可以为此使用mod_rewrite。如果此模块可用,则使用这些规则(必须放在 /.htaccess 中):

RewriteEngine on
RewriteCond %{QUERY_STRING} ="abc"
RewriteRule ^page1\.php$ /page1.php?xyz [R=301,L]

也有一个仅限 PHP 的解决方案:

if ($_SERVER["QUERY_STRING"] == "abc") {
    header("Location: /page1.php?xyz", true, 301);
    die;
}

【讨论】:

  • 是什么让您说 RewriteEngine 无法发送重定向标头? R 标志完全符合您的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多