说我有
dev.mydomain.com
我希望
dev.mydomain.com
透明地重定向到mydomain.com:8080
和我想要保留原始子域名的浏览器URL。如何使用Apache 2.2做到这一点?我在默认端口
80
上运行了Apache 2.2。我无法弄清楚写入配置是否可以实现。我已经设置了
dev.mydomain.com
可以在DNS中解析为mydomain.com
。这是对于具有不可路由ip的Intranet开发服务器,因此我不太担心漏洞利用和安全性,以至于
会损害面向公众的服务器。
#1 楼
解决方案这是我在迈尔斯·埃里克森(Miles Erickson)设定正确方向之后终于想到的。我希望地址栏反映请求的原始子域/域,而不是重定向的服务器和端口,但他使我使用
VirtualHost
进入了Google正确的解决方案,最后我找到了一个包括mod_proxy
的解决方案。<VirtualHost *:80>
ServerAdmin me@mydomain.com
ServerName dev.mydomain.com
ProxyPreserveHost On
# setup the proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://localhost:8888/
ProxyPassReverse / http://localhost:8888/
</VirtualHost>
#2 楼
在终端上运行以下行(正确指定您的域名和子域名)sudo nano /etc/apache2/sites-available/subdomain.example.com.conf
粘贴以下代码并根据需要进行更改
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName subdomain.example.com
ServerAlias subdomain.example.com
ProxyRequests Off
#ProxyPass / http://localhost:8080/
<Location />
ProxyPreserveHost On
ProxyPass http://example.com:8080/
ProxyPassReverse http://example.com:8080/
</Location>
# Uncomment the line below if your site uses SSL.
#SSLProxyEngine On
</VirtualHost>
在终端上运行以下行(正确指定您的域名和子域名)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
评论
此答案与接受的答案之间有本质区别吗?
–卡巴斯德
16年1月18日在10:13
大多数人忘记添加sudo a2enmod proxy_http,因此他们在正常运行时会遇到困难。另外,我尝试按顺序给出从头到尾的完整过程,以帮助您更好地适应。感谢您的提问。
– M.A.K.里彭
16 Jan 18'在10:34
+1是因为提及“ ProxyRequests Off”
–塞巴斯蒂安
17年2月7日在8:27
这对我不起作用。 “ sudo a2enmod subdomain.domain.com.conf”说“错误:模块x.y.z不存在!”是否必须在“默认”配置中提及?
–德克·舒马赫(Dirk Schumacher)
17年4月17日在9:17
更正注册子域sudo a2ensite sub.yourdomain.com
–阿里·阿扎尔(Ali Azhar)
17年8月1日在19:53
#3 楼
假设dev.mydomain.com可以解析为mydomain.com的IP,则可以在httpd.conf中添加以下内容:NameVirtualHost *:80
<VirtualHost *:80>
ServerName dev.mydomain.com
redirect / http://mydomain.com:8080/
</VirtualHost>
相关的Apache文档:
创建基于名称的虚拟主机的指南
包括VirtualHost和NameVirtualHost在内的核心
重定向
相关问题:
基于主机名的Apache重定向
(注意:该答案的原始版本错误地建议使用RedirectMatch,正如@ChrisS所指出的那样,它无法解析RedirectMatch的域部分URL。)
评论
请参阅我自己提供的关于我实际使用的答案的内容,这是带有Mod_proxy的VirtualHost的想法,用于保留原始主机而不进行重定向。这是一台内部服务器,因此我不关心安全性或对mod_proxy的利用。
–user35861
2010-10-28 15:38
找到了许多其他建议,但这最终在Windows Server 2008 R2 / Apache 2.2.25上对我有用。
– HPWD
15年7月12日在20:07
此解决方案的问题在于,在您的兄弟中,您不停留在第一个域上,而第二个则得到302。
– Pleymor
17年2月9日在12:20
#4 楼
在您的主要vhost配置中添加以下行:ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/
请注意,这需要在Apache上使用mod_proxy。
评论
这不是重定向;它代理连接。如果您不太谨慎地配置mod_proxy,则启用它非常容易。我强烈建议您不要这样做。
–克里斯S
2010-10-28 12:38
根据他的操作,他不希望重定向。他希望原始URL保留在地址栏中。这意味着使用mod_proxy或mod_rewrite,最好避免使用mod_rewrite。
–适配器
2012年3月1日14:40在
#5 楼
您正在寻找mod_rewrite。这是Apache文档的链接,其中包含许多基本和高级配置示例。.如果您自己无法解释文档,请尝试将其添加到httpd.conf中:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com:8080 [R=301]
如果不是一个清晰的例子,这也是到mod_rewrite初学者指南的链接。
评论
我正在共享主机上。重写是唯一的选择。我可以创建.htaccess文件,但不能创建代理或虚拟主机。
– abalter
18年2月15日在17:18
评论
对于这个答案不起作用的每个人,请记住,您必须启用mods mod_proxy以及proxy_http。
–matewka
15年11月20日在19:47
那在nginx中呢?
– rosefun
20年12月1日,14:41