2012-12-16 145 views
2

我是一種在網絡世界的noob,所以我的道歉...我嘗試了很多事情發現在SO和其他地方,但我沒有設法做我所做的想。而且Apache文檔太完整了。.htaccess重定向到子文件夾,並刪除它的名稱

基本上我想要做的是將我的域名重定向到子文件夾。我找到了簡單的解決方案(實際上有許多不同)。

http://www.foo.com/ 
http://foo.com/ 

應該重定向到/bar並顯示爲http://foo.com/

使用下面我得到預期的結果:

RewriteEngine on 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.foo.com$ 
RewriteRule ^/?$ "http\:\/\/foo.com" [R=301,L] 
RewriteRule ^((?!bar/).*)$ bar/$1 [NC,L] 

但我也希望子文件夾和文件名進行沒有明確何時出現輸入,即:

http://www.foo.com/index.html 
http://foo.com/index.html 
http://wwww.foo.com/bar 
http://foo.com/bar 
http://wwww.foo.com/bar/index.html 
http://foo.com/bar/index.html 

應全部顯示爲

http://foo.com/ 

這可能嗎?

很明顯使用.htaccess,因爲我在虛擬主機上。

感謝

+1

在第一個重定向規則中,URI(例如'/ bar/index.html')被刪除,所以沒有什麼可以追加到最後的重寫規則中。我認爲不可能像你問的那樣把它變成一般。如果它適用於'/ bar',那是因爲你明確地在規則中添加它。 –

回答

0

正如菲利普說,這不是真的有可能,當你這樣做R = 301重定向,因爲你失去的信息:硬盤重定向這樣開始了全新的要求,沒有前一個請求的內存。

當然,有辦法可以做類似的事情。最簡單的方法是將原始請求放入查詢字符串中(here很好地說明了mod_rewrite如何與查詢字符串一起工作)。當然,查詢字符串確實顯示在URL中,但大多數現代瀏覽器將查詢字符串隱藏在地址欄中,所以如果您的目標是美學,那麼這種方法是可行的。

如果您確實不想在網址中顯示任何原始查詢,您可以通過使用CO flaghere是關於cookie操作的一些非常好的示例)來使用Cookie。無論如何,關於原始請求的信息必須以某種方式在硬重定向中傳遞。

但無論如何,最重要的是,你爲什麼要這樣做?它一定會混淆人類和機器人。當框架很時髦時,很多頁面都表現得像這樣回來,它非常糟糕(沒有書籤,沒有簡單的內容鏈接,Google結果的片段是「你的瀏覽器無法處理框架」,沒有重新加載,不穩定的後退按鈕,那些日子)。說到這一點,如果你的內容是html,你可能只是使用一個普通的舊iframe來達到效果(但我會誠懇地建議不要這樣做)。