【问题标题】:Redirecting all traffic based on Host name根据主机名重定向所有流量
【发布时间】:2011-08-25 03:50:44
【问题描述】:

外部服务器(我将其称为“sub.origin.edu”)将所有流量重定向到我的网页。我想从该主机获取所有流量,并将其重定向到不同的站点(我将其称为“http://foo.target.edu/board/”)。

我的 .htaccess 文件是:

 RewriteEngine On
 RewriteCond     ${HTTP_HOST}    sub\.origin\.edu [NC]
 RewriteRule     ^(.*)$  http://foo.target.edu/board/ [R=302]

这似乎不起作用。我已经确认(使用 PHP)主机确实是 sub.origin.edu,并且 .htaccess 文件位于正确的目录中,但这条规则只是没有生效。有什么建议么?谢谢。

(如果我删除 RewriteCond,则会发生重定向,因此我可以确认除重写条件之外的所有内容都正常工作。)

【问题讨论】:

  • 我用 PHP 测试过,print $_SERVER['HTTP_HOST']; 打印出 sub.origin.edu。

标签: apache mod-rewrite redirect host


【解决方案1】:

使用这个:

RewriteEngine On
RewriteCond     %{HTTP_HOST}   sub\.origin\.edu [NC]
RewriteRule     ^(.*)$  http://foo.target.edu/board$1 [R=302]

您使用了错误的替换字符($ 而不是%)

【讨论】:

  • 天哪。我们去吧。谢谢。
  • 我认为在[R=302] 之后添加[L] 标志以终止进一步的规则评估(如果有的话,立即返回)会很有价值。
【解决方案2】:

我在尝试完成对特定主机名的重新定义时发现了这个问题。 此链接对了解 RewriteCond 和 RewriteRule 的工作方式有很大帮助。

http://httpd.apache.org/docs/2.4/rewrite/intro.html

【讨论】:

    【解决方案3】:

    如果 sub.origin.edu 正在执行 3xx 重定向,则浏览器将使用 your.server.edu 作为主机名向您的服务器发出新请求。所以这条规则永远不会匹配。如果是这种情况,就没有简单的方法来判断请求是从哪里重定向的。

    如果他们使用 CNAME,则 Femi 有正确答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多