2013-05-26 64 views
3

我在這裏閱讀了很多關於此問題的問題和解答,但似乎沒有解決我的具體問題。將通配符子域名重定向到子目錄,而不更改地址欄中的URL

我想將任何子域重定向到子目錄進行匹配。

因此:x.domain.com將轉到domain.com/x,並且y.domain.com轉到domain.com/y - 但是我想在地址欄中不更改網址的情況下執行此操作。

這是我到目前爲止有:

Options +FollowSymLinks 

    RewriteEngine on 

    RewriteBase/

    RewriteCond %{HTTP_HOST} !^(www)\. [NC] 

    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com [NC] 

    RewriteRule^/%1 [P,L] 

但這需要我到一個網站重定向循環,與在子域仍然存在地址欄的地址不正確。

例如,x.domain.com帶我到x.domain.com/x,我得到一個重定向循環錯誤。

如果有人能指出我正確的方向,我將不勝感激!我沒有什麼改變,似乎工作...

+0

請參閱我的解決方案。 –

回答

7

首先,確保在Apache配置虛擬主機配置正確,以及domain.com的所有子域都在同一個主機配置(通配符):

<VirtualHost *:80> 
ServerName domain.com 
ServerAlias *.domain.com 
... 

你可以重定向用下面的htaccess的配置工作:

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

現在,如果你打開asd.domain.com它應該重定向你domain.com/asd。 您仍然有問題,即重定向在URL地址欄中可見。爲了防止這種情況,啓用mod_proxy的(並加載子模塊)的服務器上,並用「P」標誌交換「L」標誌:

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

如果這不起作用,查看虛擬主機的配置和子域調用中的error.log內容將會很有幫助!

參考文獻:
.htaccess rewrite subdomain to directory
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p

+0

我試過這個,但是我收到一些錯誤... [Sun May 26 13:02:28 2013] [error] [client 2.126.187.186]嘗試服務目錄:proxy:http://domain.com/x/ [Sun May 26 13:02:29 2013] [error] [client 2.126.187.186]文件不存在:proxy:http://domain.com/x/favicon.ico – Newnab

+0

當我訪問URL x.domain.com我得到一個404,它說:請求的URL /在這臺服務器上找不到。 – Newnab

+0

之前它是否有效,當你有標誌「L」而不是「P」?當mod_proxy未啓用時,我通常會收到消息「嘗試提供目錄:proxy:domain.com/x」!而且可以肯定的是,您將「domain.com」替換爲您的真實域名? – meberhard

0

我命名的子目錄下$_SERVER['DOCUMENT_ROOT']匹配我的子域,像這樣:

/ 
var/ 
    www/ 
     html/ 
       .htaccess 
       subdomain1.domain.com/ 
       subdomain2.domain.com/ 
       subdomain3.domain.com/ 

/var/www/html立場作爲'DOCUMENT_ROOT'。然後把下面的代碼.htaccess文件:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/ 
RewriteRule (.*) /%{HTTP_HOST}/$1 [L] 

它可以作爲重定向通配符子域子目錄,沒有地址欄更改URL。

旁邊的vhost,你也可以把使用別名它外面根和訪問子目錄描述here。然後在該位置放置相同的.htaccess代碼。

7

這可以在.htaccess沒有mod_proxy實現,只要您的服務器配置爲允許通配子子域。 (我通過手動創建一個名爲*的子域在JustHost中實現了這一點)。將此添加到您的.htaccess文件中:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.website\.com$ 
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$ 
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1 
RewriteRule ^(.*)$ /%1/$1 [QSA] 
相關問題