2012-07-18 185 views
0

我試圖用我當前的共享主機配置修復一些煩惱,但是我有一些問題會根據需要設置一切。.htaccess將根重定向到子域

目前,我有以下文件夾結構:

/ 
/.htaccess 
    /example 
    /example1 
    /example2 
    /example3 

在共享主機,主域被自動設置爲指向根目錄。在努力指向主域的子域,添加以下到我的根文件的.htaccess:

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

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ 
RewriteCond %{REQUEST_URI} !^/example/ 
#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /example/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ example/ [L] 

這正確重寫URL,以便將example.com顯示從/例子內容/子目錄。問題是根目錄的子目錄沒有以相同的方式重寫,這不是我希望實現的功能。例如:

http://www.example.com/   = /example 
http://www.example.com/example/ = /example 
http://www.example.com/example1/ = /example1 
http://www.example.com/example2/ = /example2 
http://www.example.com/example3/ = /example3 

我希望發生的是:

http://www.example.com/   = /example 
http://www.example.com/example/ = /example/example 
http://www.example.com/example1/ = /example/example1 
http://www.example.com/example2/ = /example/example2 
http://www.example.com/example3/ = /example/example3 

我應該發生的事情的理解如下:

  1. 申請獲得http://www.example.com
  2. 第一個條件不符合,HTTP_HOST不匹配^ example.com $
  3. 第二個條件:比賽^ www.example.com
  4. 第三個條件:無REQUEST_URI,所以它不是^ /例子/
  5. 匹配
  6. 第四和第五:我嘗試過和沒有這些,但它似乎沒有改變結果。我的理解是,如果這些行沒有註釋,我會馬上看到不需要的東西(如果文件名和目錄存在,重寫就不會發生)。
  7. 將請求重寫爲example.com/example/
  8. 第六個條件:將URL與特定域匹配。
  9. 總是重寫爲使用此URL的/ example /子目錄。

這似乎工作,但如果我嘗試去http://www.example.com/example2/,我得到的問題。由於REQUEST_URI與/ example /不匹配,我的想法是它應該重寫爲/ example/example2,但這顯然不會發生。

我沒有訪問Apache配置或設置VirtualHosts的能力,所以我希望有一些方法可以用.htaccess規則來做到這一點。任何關於我如何過分複雜化這個簡單任務的見解都將非常有幫助。

+0

這些規則看起來是正確的。你確定重定向沒有被你的瀏覽器緩存嗎? – Ansari 2012-07-18 05:28:32

+0

是的,在使用CTRL + F5並手動刪除緩存後,我嘗試了多種瀏覽器(Chrome,Firefox和IE)。 – Jared 2012-07-18 10:59:47

回答

0

據我所知,如果根中的某個目錄與進入的請求相匹配(即如果exam​​ple1存在於根目錄中,則將RewriteCond重寫/ example1到錯誤頁面從未被觸發)。

我對此的解決方案最終沒有我希望的那麼優雅,但它似乎正在工作。希望它可以幫助任何人絆倒這個問題。

在example1,example2和example3目錄裏面,我修改了。htaccess文件包括以下內容(基於目錄的改變例1):

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

這迫使主域名服務是我爲它創建的子目錄中,即使有一個匹配的內容目錄中的根目錄。