2011-06-26 53 views
1

HOWTO與htacess使這個:的.htaccess的泛域名指向子目錄

a.domain.com -> domain.com/a 
b.domain.com -> domain.com/b 
. 
. 
. 
z.domain.com -> domain.com/z 

我嘗試:

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

RewriteRule (.*) %1/$1 [L] 

但500錯誤

回答

1

試試這個:

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

可能的問題:

  • 你是否在行代碼上面設置了行RewriteEngine on
  • mod_rewrite已安裝/啓用?
0

非常相似:mod_rewrite is ignoring rules in subdirectories

不幸的是,你得到了規則是不行的(準確地說:他們實際工作 - URL重寫得到了..但隨後阿帕奇看到[L]標誌後它去另一個迭代..它再次被重寫......並且再次 - 進入無休止的循環,Apache必須在某個時刻斷開)。

你必須添加一些條件,這將完全打破迭代。這樣做的可能性很少(取決於其他規則,你可以在這裏閱讀更多信息 - performance impact of order of rewrite rules when using apache mod_rewrite)。

我已經修改了規則,增加了2個條件,使得它只重寫目標DOES EXIST。

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ 
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d 
RewriteRule (.*) %1/$1 [L,QSA] 

所以..它是如何工作的。我們將使用此URL作爲示例:http://home.domain.com/kaboom.txt

  1. 如果文件​​不存在 - 沒有任何事情發生。
  2. 如果這樣的文件存在 - URL被內部重寫爲http://home.domain.com/home/kaboom.txt(完整的URL)。 Apache進入下一次迭代。在那裏檢查domain.com/home/home/kaboom.txt是否存在。很可能不會(除非您的子文件夾與子域具有相同的名稱)並且不會發生更多重寫 - 完成工作。