Apache重写域请求子域请求

时间:2009-06-06 03:20:10

标签: apache subdomain rewrite

警告:我通过培训或交易(C ++开发人员)是Apache专家或网站管理员,所以我希望这是一个相当明显的新手级问题。提前道歉。

我需要一个Apache 2.x重写规则,它将请求的域作为子域映射到我们的域中。

简化示例:

domain1.com/index.php?option=80     ->      domain1.masterdomain.com/index.php?option=80
www.domain1.com/index.php?option=99 ->      domain1.masterdomain.com/index.php?option=99
domain2.com/index.php?option=33     ->      domain2.masterdomain.com/index.php?option=33
www.domain2.com/index.php?option=44 ->      domain2.masterdomain.com/index.php?option=44

我尝试了各种建议选项,但到目前为止,没有任何乐趣。最新的尝试是:

RewriteRule   ([^.]+)\.com(.*) http://$1.masterdomain.com [L]

注意:它存在于一个虚拟主机上,该主机在特定的IP上拥有端口80,因此在VHost中没有任何其他有趣的东西,我可以看到它对此有任何影响。

我相信我的问题完全在我的正则表达式中,但老实说,这是在逃避我。

任何援助都会得到很多帮助。我一直在研究Apache文档以及我能找到的所有Googled技巧,但我只是没有看到它。

感谢〜

2 个答案:

答案 0 :(得分:3)

实际上,只要“源”和“目标”域由同一服务器处理,就不需要重写域名。您只需要对不同的域进行别名以引用同一主机。具体来说:我想现在你有<VirtualHost>块看起来像这样:

<VirtualHost *:80>
    ServerName domain1.masterdomain.com
    # other rules
</VirtualHost>
<VirtualHost *:80>
    ServerName domain2.masterdomain.com
    # other rules
</VirtualHost>

您需要做的就是添加ServerAlias指令,如下所示:

<VirtualHost *:80>
    ServerName domain1.masterdomain.com
    ServerAlias domain1.com
    ServerAlias www.domain1.com
    # same other rules as before
</VirtualHost>
<VirtualHost *:80>
    ServerName domain2.masterdomain.com
    ServerAlias domain2.com
    ServerAlias www.domain2.com
    # same other rules as before
</VirtualHost>

这将使Apache处理域名domain1.comwww.domain1.com的方式与处理domain1.masterdomain.com的方式相同。

答案 1 :(得分:0)

感谢快速回复!实际上,我有一个处理所有站点的VHost(因为它们都具有相同的结构),利用VirtualDocumentRoot指令。如果需要,我可以发布整个VHost条目,但我认为这对我的问题来说太过分了。

自上一篇文章以来,我取得了进步。以下内容根据需要执行重写,虽然它更新了浏览器URL,我希望用户不要知道他们已经在内部重定向。

 RewriteCond    %{HTTP_HOST}    ^(www\.)?([^.]+)\.com$ [NC]
 RewriteRule    ^(.*)$      http://%2.masterdomain.com$1

我不确定为什么它会更新浏览器URL的重定向。我以为我读过只有在规则行的末尾明确添加[R]才会发生。最终,浏览器仍然需要显示:test1.com/index.php?id = 5,而内部cgi收到test1.masterdomain.com/index.php?id=5。

另一个可能有用(或没有)的数据点,我在rewrite.log中看到,在匹配之后,它隐式执行重定向(rc = 302)。以下是我认为重要的两条线:

 implicitly forcing redirect (rc=302) with http://test1.masterdomain.com/index.php
 redirect to http://test1.masterdomain.com/index.php?id=5 [REDIRECT/302]

非常感谢任何想法/建议! 20多年的C ++,但是只用了不到一周的Apache,所以仍然是一个非常挣扎的新手。

-wb

P.S。由于对锁定的网络应用程序的一些编码要求,我实际上需要cgi收到的网址为xxx.masterdomain.com(长篇故事,不是我的选择或方法;只是试图解决我得到的问题是高度受限制的要求....此外,我对消毒后的数据表示道歉 - 遵循从高端开始的指令。-smile-)再次感谢!