2011-08-26 74 views
5

我對mod_rewrite不太好,但我現在真的需要它。RewriteRule重定向除一個文件夾以外的所有東西

我有一個名爲site的文件夾中的全新網站。所以如果你需要去新的網站,URL看起來像http://domain.com/site/...。現在我需要從URL中排除site,但仍指向/site/,除了名爲upload的一個文件夾。我怎樣才能做到這一點?

所以http://domain.com/anything.exthttp://domain.com/anyfolder將指向http://domain.com/site/...除了domain.com/upload仍指向domain.com/upload

然後,另一個問題是,假設這隻適用於臨時解決方案,或者它並不重要(考慮速度和效率)?

回答

7

(假設你把規則在你的文檔根.htaccess文件)使用此:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^upload 
RewriteRule (.*) site/$1 [L] 

如果你是把它變成httpd.conf中,你需要稍微改變:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/upload 
RewriteRule (.*) /site$1 [L] 

關於第二個問題,我個人不喜歡mod_rewrite,當然不會用它作爲永久解決方案,除非你絕對必須。這是因爲mod_rewrite效率很低,特別是在繁忙的服務器上,因爲它必須在每個傳入請求上至少運行一個正則表達式。您應該始終使用[L]標誌來確保不會處理超出必要的規則。

以與應用程序引用目錄相同的方式構建目錄總是更高效。以上這些應該會讓你工作,但儘量不要將它擱置太久。

我確定你已經知道了,但here是mod_rewrite文檔。

+0

當我使用它(.htaccess代碼)時,它顯示內部服務器錯誤。我找不到什麼是錯的。 – Boyd

+0

當你遇到錯誤時,你的apache日誌會說什麼? ;-) – DaveRandom

+0

我的客戶託管公司是在屁股疼痛。他們不支持htaccess問題,因此不想給我發送任何日誌..他們確實表示他們不會限制任何htaccess功能。假設我的代碼沒問題,我應該繼續聯繫託管公司,否則會出現內部服務器錯誤的其他原因? (不要忘記,它只顯示當.htaccess包含上面的代碼) – Boyd

相關問題