2011-03-23 114 views
4

在這裏是許多主題有關的子域,但沒有人可以幫我...htaccess的子域重寫

我用htacces設置子域文件夾

所以,如果我們把http://en.example.com/something

我使用的東西這樣的..

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$  http://example.com/%1/$1 [NC] 

這工作得很好,但在ADRESS條改爲http://example.com/en/something但我想保持http://en.example.com/something

所以我想這個

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

或只是

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

但這不起作用。任何解決方案或想法?

一個解決方案是使用那裏的語言(http://example.com/en/something)在那裏我重寫它,但後如果我在子目錄上工作,我得到像http://example.com/subdirectory/en/something - 可怕的東西。 也許我喜歡http://example.com/en/subdirectory/something芽如何進行此操作...

而且在一些私人服務器上,首先有一種情況會將我發送到「可能」默認域,所以它不適用於我。 (也許這是一些服務器的條件或設置)

回答

5

我知道這是一個月後,但也許這仍然是有用的人。這裏有幾件事情:

關於你的第一個重寫規則:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$  http://example.com/%1/$1 [NC] 

,因爲它似乎你已經發現,改寫到另一個URL也將在用戶的瀏覽器重定向到新的URL,即使是在自己的域名。爲了保持隱藏,你必須重寫到服務器上的文件路徑(就像你對下兩條規則做的一樣)。

關於你提到的第二個重寫規則:

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

的問題還有就是你不能在重寫規則相匹配的域名,只有URL路徑。如果您的網址是www.example.com/something/somethingelse,那麼您嘗試匹配的字符串只是something/somethingelse。換句話說,它不包括www.example.com/,所以您擁有的RewriteRule模式將永遠不會匹配域名,因爲該模式甚至沒有針對URL的該部分進行測試,但您將域名包含在該模式,導致匹配失敗。

關於你提到的第三個重寫規則:

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

這看起來像它應該工作,所以不知道更多關於你的文件是如何在服務器等組織我不能肯定它爲什麼不說向前。假設您擁有/home/somebody/public_html/中的所有網站文件。爲了使RewriteRule正常工作,您需要在public_html中有一個en子目錄。因此,如果有人前往en.example.com/something,RewriteRule將導致Apache在/home/somebody/public_html/en/something處提供文件。我的猜測爲什麼它不適合你是因爲你可能會將子域指向public_html(假設你實際上已經像我的例子中那樣組織了網站文件)。請記住,您正在重寫的內容(在這種情況下爲/$1/$2)是服務器上的文件路徑,而不是您網站的URL。

我希望有幫助!你現在可能已經解決了這個問題,但即使你有,我希望其他人仍然會覺得這很有用。