将子域重写为不同的子域+子目录

时间:2016-07-17 20:59:42

标签: apache .htaccess mod-rewrite

我一直在靠墙试图找出如何做到这一点。

我只有Office云版(SaaS)。要访问它的域看起来像这样:mydomain.onlyfoffice.com

它具有应用自定义域的功能,因此我通过调整onlyoffice控制面板中的设置将其更改为:desk.mydomain.com,我不得不将A记录更改为intranet.onlyoffice.com的CNAME 。我现在可以转到desk.mydomain.com

来访问它

现在这是我的问题。我如何使URL看起来像这样:office.mydomain.com/desk/?我还需要它继续使用URL,如office.mydomain.com/desk/app/etc/etc...

这可能吗?

这种设置的原因是因为我正在尝试在一个子域下组织我用于业务的所有应用程序:office.mydomain.com。我在其他子目录中安装了其他非saas应用程序,例如:office.mydomain.com/code/office.mydomain.com/analytics/等。

由于我无法将onlyoffice的自定义域设置为子域+目录,因此我考虑将其设置为不同的子域,然后使用mod_rewrite或代理传递或其他内容重新编写URL。

2 个答案:

答案 0 :(得分:2)

您无法使用mod_rewrite执行此操作。

我相信您正在寻找ProxyPass指令。首先,您需要启用mod_proxyproxy_http,如下所示:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

您还应该添加一些内容以供访问:

<Proxy *.>
    # If using Apache 2.4, replace the next 2 lines with 'Require all granted', without quotes
    Order Deny,Allow
    Deny from all
</Proxy>

然后您需要将其添加到apache2.conf(或httpd.conf)文件中(您无法从.htaccess执行此操作):

ProxyPass     /desk/     http://www.desk.mydomain.com/
ProxyPassReverse /desk/  http://www.desk.mydomain.com/

第一行启用代理(这几乎就像重写),而ProxyPassReverse基本上是这样,发送到浏览器的标头不会使用http://www.desk.mydomain.com

在启用模块并进行配置更改后,不要忘记重启apache。

答案 1 :(得分:0)

您可以使用重写+代理模块执行此操作。确保已激活重写,代理和proxy_http模块。然后在office.mydomain.com的.htaccess文件中使用

RewriteRule ^desk/(.*) http://desk.mydomain.com/$1 [P,L]

这应该可以解决问题。