如何将子域名redirect到同一服务器上的其他端口?

我有一些子域,我想redirect到同一台服务器上的特定端口。 说我有

dev.mydomain.com 

我想dev.mydomain.com透明地redirect到mydomain.com:8080 ,我想保留原来的子域名浏览器的url。

我如何用Apache 2.2来做到这一点? 我有默认端口80上运行的Apache 2.2。 我无法找出写configuration来实现这一点。

我已经设置了dev.mydomain.com在DNS中parsing到mydomain.com

这是一个intranet开发服务器,具有不可路由的IP地址,所以我不太关心漏洞和安全性,会危及公众面临的服务器。

    迈克尔·埃里克森(Miles Erickson)在正确的方向上完成了我终于想到的事情。 我想要地址栏反映请求的原始子域/域,而不是redirect的服务器和端口,但他把我放在正确的path谷歌了解决scheme使用VirtualHost ,我终于find了一个解决scheme,包括使用mod_proxy

     <VirtualHost *:80> ServerAdmin [email protected] 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> 

    假设dev.mydomain.com可以parsing为mydomain.com的IP,那么可以在httpd.conf中添加以下内容:

     NameVirtualHost *:80 <VirtualHost *:80> ServerName dev.mydomain.com redirect / http://mydomain.com:8080/ </VirtualHost> 

    相关的Apache文档:

    1. 指导创build基于名称的虚拟主机
    2. 核心 ,包括VirtualHost和NameVirtualHost
    3. redirect

    相关问题: 基于主机名的Apacheredirect

    (注意:此答案的原始版本错误地build议使用RedirectMatch,正如@ChrisS帮助指出的那样,无法分析URL的域部分。)

    在主虚拟主机configuration中添加以下几行:

     ProxyPreserveHost On ProxyPass / http://example.com:8080/ ProxyPassReverse / http://example:8080/ 

    请注意,这需要Apache上的mod_proxy。

    在terminal上运行以下行(正确指定您的域名和子域名)

     sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

    粘贴以下代码并根据需要进行更改

     <VirtualHost *:80> ServerAdmin [email protected] 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> 

    在terminal上运行以下行(正确指定您的域名和子域名)

     sudo a2enmod proxy sudo a2enmod proxy_http sudo a2ensite subdomain.example.com.conf sudo service apache2 restart 

    你正在寻找mod_rewrite。 这里是Apache文档的链接,其中包括许多基本和高级configuration的例子。

    如果你不能自己解释文档,试试把这个添加到httpd.conf中:

     RewriteEngine on RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC] RewriteRule ^(.*)$ http://example.com:8080$1 [R=301] 

    如果这不是一个明确的例子,这里也是一个mod_rewrite初学者指南的链接 。