2014-04-30 51 views
0

的網址我想才達到如下的Apache的mod_rewrite:如何mod_rewrite的基礎上sudomains

URL - >地圖文件:

*.example.com/**/* -> index.php/$1/$2 

例如:

portal.example.com/ -> index.php/portal 
portal.example.com/agb -> index.php/portal/agb 
admin.example.com -> index.php/admin 
admin.example.com/my/cool/subfolder -> index.php/admin/my/cool/subfolder 

我怎麼能達到這個?也許與RewriteCond有什麼關係?

回答

2

首先,確保所有子域都指向相同的主機(通配符)。這通常在Apache主機的配置文件中完成。

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

那麼你應該得到想要的重定向具有以下配置工作:

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

參考: Redirect wildcard subdomains to subdirectory, without changing URL in address bar

更新1:

這裏是更新你多通配卡的情況。請注意,我更改了最後一行 - 我明確地調用基礎url的index.php,就像這樣,$ _SERVER ['PHP_SELF']的輸出應該是/index.php/portal/index.html(或根據您的php Apache配置)。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ 
RewriteRule ^(.*)/?$ http://%2.%3/index.php/%1/$1 [L,NC,QSA] 
+0

那幾乎正是我期待的,但有一點是缺少:portal.example.com/沒有映射到的index.php /門戶 – bernhardh

+0

我只是測試這個我開發的服務器上,它工作。是否有可能,您之前測試過一些R = 301的重定向,因此您的瀏覽器緩存了一些「舊」重定向規則?如果清除緩存或嘗試使用其他瀏覽器(至此之前未測試過),會發生什麼情況? – meberhard

+0

是的,我現在在IE中測試它,並得到了相同的結果:如果我嘗試訪問portal.example.com/(帶和不帶/),我得到$ _SERVER ['PHP_SELF'] = /index.php 如果我訪問portal.example.com/agb我得到$ _ SERVER [ 'PHP_SELF'] = /index.php/portal/agb – bernhardh