2012-01-15 42 views
2

我想重定向所有的請求到一個子目錄,但無法弄清楚如何。我看了here,但那對我沒用。創建阿帕奇國防部重寫規則來處理所有請求子目錄

所以,如果有人訪問www.example.com/test,我希望它重定向到:www.example.com/test/subdirectory,但URL仍然需要www.example.com/test

我還需要的參數工作,例如www.example.com/test/index.php?action=home必須重定向到www.example.com/test/subdirectory/index.php?action=home

我希望有人能幫幫我!

回答

1

所以實際上你要求的不是重定向。

一個重定向意味着Web服務器會發送一個新的URL包含子目錄,瀏覽器會然後要求這個新的URL,並顯示在瀏覽器的地址欄。

你需要的是一個目錄結構tranparently映射到不同的實際目錄結構。這是Apache可以通過Alias指令輕鬆完成的操作。 Mod-rewrite也可以這樣做,其中RewriteRules不包含[R]標籤,這意味着內部重寫,而不是重定向HTTP響應。一個[QSA]標籤還會告訴mod-rewrite將當前查詢字符串參數保留在重寫的url上。但Mod重寫並不總是很容易理解,而且你的問題對於基本的Alias來說足夠簡單,它幾乎總是包含在Apache中(通常比mod重寫)。

這應該是確定:

Alias /test /test/subdirectory 
+0

嗨regilero,謝謝你的回答,真的很感激!我不知道別名的存在。我將你的答案標記爲我的問題的正確答案。現在我收到錯誤:別名不允許在這裏。但我認爲這是由於我的託管許可設置。 – user969124 2012-01-16 20:48:51

+3

「別名」指令不能在'.htaccess'文件中使用。它需要在主服務器配置或虛擬主機中。 – dave1010 2013-07-16 14:55:05

1

嘗試添加以下到您的網站的根目錄下的.htaccess文件。 查詢字符串參數默認傳遞。

RewriteEngine on 
RewriteBase/

#if not an existing file or directory 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# rewrite to subdirectory 
RewriteRule ^(.*)(/[^/]+)?$ /$1/subdirectory/$2 [L,QSA] 
+0

嗨烏爾裏希Palha。感謝您的支持! – user969124 2012-01-16 20:49:28