2012-05-04 61 views
0

我的服務器提供商停止給我可能的方式來創建控制面板中的子域名,他們說我應該用htaccess解決它。文件夾到子域

所以我必須做這樣的事情。當用戶鍵入http://asdf.example.com時,它應該得到http://example.com/asdf的內容(因爲提供者改變了甚至FTP的結構...他們怎麼樣)

我沒有找到任何教程。提前致謝。

+1

可能重複(http://stackoverflow.com/questions/1456956/redirect-subdomain-to-folder) –

回答

1

你可以做到這一點的mod_rewrite和mod_proxy的:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^asdf\.example\.com$ 
RewriteRule^http://example.com/asdf%{REQUEST_URI} [L,P] 
1

你不需要國防部代理。只是做了一個內部重定向:

RewriteEngine on 
RewriteBase /
RewriteCond %{HTTP_HOST} =asdf.example.com 
RewriteCond $0   !^asdf/ 
RewriteRule ^.*   asdf/$0    [L] 

規則重寫請求前綴asdf/但前提是:(1)主機http:/asdf...和(2)重寫尚未發生。你需要(2)來防止迭代循環。 $ 0是規則中的匹配字符串。

希望這會有所幫助。

2

TerryE的答案的更通用版本。我還沒有測試它!的[重定向子域文件夾]

RewriteCond %{HTTP_HOST} !www.example.com 
RewriteCond %{HTTP_HOST} (.*).example.com 
RewriteCond %1/$0  !^([^/]+)/\1 
RewriteRule ^.*   %1/$0 [L] 
+0

我不認爲這會工作,因爲第一遍fred.ex ... cond1將cond2的%1設置爲'fred',但cond2的regexp將失敗,所以即使cond成功(因爲!操作符),%1將不會被設置爲重寫規則。 *但是,我們應該能夠分割規則規則模式'^([^/| + /)?(。*)'並設置$ 1和$ 2,然後使用'RewriteCond $ 1%1!^(。*?)/ 1'作爲不等於檢查,然後重複cond2來重置%1。仍然是+1,因爲它是一個好主意。回到我的希臘島撤退! – TerryE

+0

有一個小錯字; '|'應該是']'。 – Gerben

+0

@TerryE我也曾經這麼想過,但據我所知!也會禁用該條件的反向引用,%1仍將包含該子域。我在我自己的服務器上測試上面的代碼,它似乎工作正常。 – Gerben