2016-09-19 113 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