警告:我通过培训或交易(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技巧,但我只是没有看到它。
感谢〜
答案 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.com
和www.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-)再次感谢!