我試圖用我當前的共享主機配置修復一些煩惱,但是我有一些問題會根據需要設置一切。.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
我應該發生的事情的理解如下:
- 申請獲得http://www.example.com。
- 第一個條件不符合,HTTP_HOST不匹配^ example.com $
- 第二個條件:比賽^ www.example.com
- 第三個條件:無REQUEST_URI,所以它不是^ /例子/ 匹配
- 第四和第五:我嘗試過和沒有這些,但它似乎沒有改變結果。我的理解是,如果這些行沒有註釋,我會馬上看到不需要的東西(如果文件名和目錄存在,重寫就不會發生)。
- 將請求重寫爲example.com/example/
- 第六個條件:將URL與特定域匹配。
- 總是重寫爲使用此URL的/ example /子目錄。
這似乎工作,但如果我嘗試去http://www.example.com/example2/,我得到的問題。由於REQUEST_URI與/ example /不匹配,我的想法是它應該重寫爲/ example/example2,但這顯然不會發生。
我沒有訪問Apache配置或設置VirtualHosts的能力,所以我希望有一些方法可以用.htaccess規則來做到這一點。任何關於我如何過分複雜化這個簡單任務的見解都將非常有幫助。
這些規則看起來是正確的。你確定重定向沒有被你的瀏覽器緩存嗎? – Ansari 2012-07-18 05:28:32
是的,在使用CTRL + F5並手動刪除緩存後,我嘗試了多種瀏覽器(Chrome,Firefox和IE)。 – Jared 2012-07-18 10:59:47