2016-09-19 112 views
0

是否可以使用.htaccess作为子域来指向主域上的文件? 我将example.com作为主域名,并通过DirectAdmin创建子域名:one.example.com,two.example.com等。子域应指向主域上的app.php,但在子域中应保持该域。子域的重写规则

所以导航到one.example.com应指向app.php其住在主域example.com,但URL应该仍然显示one.example.com

我已经看过并尝试了很多重写规则在.htaccess rewrite subdomain to directory和其他地方找到。 目前,我有子域中的子文件夹中的.htaccess文件这个重写规则:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com 
RewriteRule ^(.*)$ http://example.com/app.php$1 [L,NC,QSA] 

这种重定向和更改URL来example.com/app.php而我想的URL显示子域:one.example.com/whatever

是否有可能使用.htaccess来做到这一点,或者甚至可能有更好的方法来做到这一点?

回答

0

一个RewriteRule与另一台服务器上的目标将永远做一个重定向

绝对URL
如果指定一个绝对URL,mod_rewrite的会检查主机名是否与当前主机匹配。如果是这样,则会删除方案和主机名,并将生成的路径视为URL路径。 否则,将为给定的URL执行外部重定向。要强制外部重定向回到当前主机,请参见下面的[R]标志。


到URL http://example.com/app.php映射到你的子域没有重定向,你可以尝试P|proxy标志

RewriteRule ^(.*)$ http://example.com/app.php/$1 [P,QSA] 

还留着最后要注意的一点

注:mod_proxy的绝被启用为了使用这个标志。

通常情况下,这可以通过

a2enmod proxy proxy_http 

做如果目标URL是https://...,则还必须启用mod_proxy_connect,并在主或虚拟主机配置激活SSL与SSLProxyEngine

SSLProxyEngine on 

根据您的需求,ProxyPass也可能是一个可行的解决方案。

+0

我试过你的建议,但它不工作,url仍然被重定向到主域。我有在example.com上运行的应用程序,并希望使用像one.example.com等网址在子域上运行它。 – zef

+0

我在我的测试环境中尝试了这一点,它确实有效。查看更新的答案。 –

+0

我确实使用https:// ...不过,我将我的子域名更改为Domain Pointers,因此作为别名。这现在对我而言无需重写url。我认为这是一个更好,更简单的方法。 – zef