Apache mod_rewrite - 将端口重写为子域

时间:2013-11-24 12:57:55

标签: php apache mod-rewrite

我为家庭托管设置了Synology DSM,我一直在尝试使用它。我目前的目标是将子域分配给特定服务,例如DSM管理员面板,SickBeard等

唯一的问题是Synology如何管理其服务。其中一些只是基于webhost(并放入他们自己的子文件夹中的/ var / services / web /文件夹),其中一些在不同的端口上运行(例如,Sickbeard在端口8083上运行,而管理面板在港口5000)。

结果是非常简单的:将这些端口重定向设置子域(见下文),不显示端口。

admin.fonix232.net - > fonix232.net:5000
sb.fonix232.net - > fonix232.net:8083
home.fonix232.net - > fonix232.net:8085

我已经为子域admin.fonix232.net设置了一个简单的mod_rewrite规则,方法如下(在httpd-vhost.conf-user中):

<VirtualHost *:*>
ServerName admin.fonix232.net

RewriteEngine on
RewriteCond %{HTTP_HOST} admin\.fonix232\.net [NC]
RewriteRule ^/(.*)$ http://fonix232.net:5000/$1 [P,QSA,L]
</VirtualHost>

它工作正常,除了它没有重写端口 - 它保持5000,但至少在子域。
我怎么能把它删除?

1 个答案:

答案 0 :(得分:0)

解决方案很简单,我不得不使用mod_proxy和mod_proxy_http。

感谢Synology如何构建其Apache系统(系统/ webman,用户和webdav三个独立服务)的方式,最好的解决方案是创建一个新的配置文件并通过略微修改启动脚本来扩展现有配置文件以导入(由于某些神秘的原因,只要有人从webman编辑设置,任何对配置文件的手动添加都会被删除。)

之后,我不得不为我想要重定向的单独服务创建单独的VirtualHosts,方法如下:

<VirtualHost *>
    ServerName [full subdomain you want to redirect to]
    ProxyRequests On
    ProxyPreserveHost On

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass / [target address and port you want to reach]
    ProxyPassReverse / [target address and port you want to reach]

    <Location />
            Order allow,deny
            Allow from all
    </Location>

虽然大多数教程都显示ProxyRequests应该关闭,但对我来说,它从未以这种方式工作,只能启用它。

现在还有一件事,完全相反。意思是,如果从* .domain.tld调用端口X,无论哪个,请将我放在指定的subdomain.domain.tld上。更难破解,但到了那里。