2010-06-13 153 views
0

我有我最初認爲是一個簡單的問題。我爲我的網站使用共享主機(因此我無法訪問Apache配置),並且只有一個文件夾來存儲我的所有內容。這一切都很好,但這意味着我的所有子域必須他們的虛擬文檔根在public_html之內,這意味着它們實際上成爲我主域上的文件夾。Apache mod_rewrite - 將域根目錄轉移到子目錄

我希望做的是組織我public_html是這樣的:

 
public_html/ 
    www/ 
     index.php 
     ... 
    sub1/ 
     index.php 
     ... 
    some_library/ 
     ... 

這樣一來,我的所有網頁內容仍處於public_html但只有一小部分會提供給客戶端。我可以輕鬆地爲所有子域實現此目標,但這是我遇到的主要問題。

我創建了一個.htaccess文件public_html下列要求:

 
Options +SymLinksIfOwnerMatch # I'm not allowed to use FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_URI} !^/www [NC] 
RewriteRule ^(.*)$ /www/$1 [L] 

這工作還算不錯,但出於某種奇怪的原因www.example.com/stuff被翻譯成請求www.example.com/www/stuff,因此被賦予一個404錯誤。我的理解是,除非指定了'R'標誌,否則mod_rewrite純粹是內部的,所以我不明白爲什麼請求會生成,因爲這意味着(至少對我而言)重定向。

我認爲這將是一個微不足道的問題來解決,因爲我實際上想要做的是將所有www.example.com的根請求轉發到子目錄,但我花了數小時尋找答案,沒有一個是非常正確的。我很難相信我是唯一有此問題的人。

我很抱歉如果這個問題已經在這裏回答過,我沒有搜索和拖網,但找不到合適的答案。請有人可以解釋一下嗎?

回答

0

最後設法解決這個問題。事實證明,即使.htaccess文件已被刪除,Apache仍會記住文件夾設置。所以我一直在玩這個遊戲很久,以前的一些嘗試已經完全污染了配置。

我解決了它首先評論所有的.htaccess文件除了RewriteEngine off它把一切(幾乎)恢復正常。然後,我設法通過編寫以下配置,以獲得預期的效果:

 
<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ www/ [L] 
    RewriteRule (.*) www/$1 [L] 
</IfModule> 

最後,我創建了另一個.htaccess文件中www目錄包含:

 
<IfModule mod_rewrite.c> 
    RewriteEngine off 
</IfModule> 

現在一切似乎都工作,我本來想。羞愧花了這麼長時間才能解決這些問題!