2017-02-16 49 views
1

任何人都可以請幫助以下重寫apache如何將子域和subsubdomain重寫爲參數?

想象我有域domain.com

我想要什麼:

如果人們要求www.domain.com然後返回www.domain.com(即 的index.php在我的根目錄)

如果人們要求subA.subB.domain.com然後返回 www.domain.com?sub=subA.subB

如果人們要求sub.d omain.com然後返回www.domain.com?sub=sub

如果人們要求的domain.com然後返回www.domain.com

我知道這裏的規則是在它自己的工作。我有。例如,類似的問題here要求重定向到/ subA/subB - 但即使我理解了這個答案,我也不知道如何使它適應我需要的東西,即sub = subA.subB。多年來我一直試圖理解很多次重寫。好的,/ sobstory -off。

回答

0

這將改寫你的子域名:

RewriteEngine on 
RewriteCond %{QUERY_STRING} !^sub= 
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.domain\.com$ 
RewriteRule ^(/?)$ $1?sub=%1 

更換域名爲適當。確保每個.之前都有斜線,就像現在一樣。

它只適用於索引頁面。如果你想在domain.com/之後有什麼東西讓我知道。

至於使http://domain.com工作,我建議重定向到www.domain.com,所以你不會從搜索引擎得到重複的內容問題。這樣做(在上面添加它):

RewriteCond %{HTTP_HOST} =domain.com 
RewriteRule^http://www.domain.com%{REQUEST_URI} [R=301,L] 

沒有必要在該點之前的斜線。

讓我知道是否有任何這對你沒有好處。


基於評論

樓主後記:

上述解決方案是針對問題正確的,但假定服務器上進行如下配置:

  • 子站點* .domain.com一直添加並指向該站點的文檔根目錄
  • * .domain.com的'A記錄'已在DNS配置中配置並指向服務器的IP地址
+0

謝謝。我添加了directoryIndex index.php到底部。目前,如果我在地址欄中輸入domain.com,我的主頁將返回並且地址欄會更新至www.domain.com。但是,如果我輸入subA.subB.domain.com,我會得到「Firefox無法在subA.subB.domain.com上找到服務器。」同樣只適用於subA.domain.com。 ? – youcantryreachingme

+1

您需要做兩件事才能使該零件起作用。首先,將您的主機設置爲* .domain.com或您需要的特定子域名,然後,如果未通過託管處理,請設置DNS條目。 – SuperDuperApps

+0

對不起 - 這是我對配置服務器的理解。我的網站託管在Hostgator上,所以我通過CPanel訪問功能。我期望動態地添加新的子域 - 也就是說,我只需將數據存放在網站中。當有人要求sub1.sub2時,該站點將檢查是否有匹配的數據,如果有,則提供。我計劃不斷添加數據 - 因此無法提前知道所有子域。我將搜索cPanel設置* .domain.com,但是如果您可以在兩個步驟中快速跟蹤我,我會感激。意識到這是冒險到一個新的問題... – youcantryreachingme