2010-06-18 56 views
1

我使用mod_rewrite/.htaccess來創建漂亮的URL。我將所有請求轉發到我的index.php,如下所示:mod_rewrite:不能訪問真實的文件和目錄

RewriteRule ^/?([a-zA-Z0-9/-]+)/?$ /index.php [NC,L]

index.php然後處理請求。

我也使用這個條件/規則來消除尾部斜槓(或者更確切地說是將它們重寫爲URL,而不使用尾部斜槓,使用301重定向;我這樣做是爲了避免重複的內容,因爲我不喜歡拖尾斜槓越好):

RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] 
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

這種運作良好,除了試圖訪問一個(真正的)目錄時,我現在得到一個無限循環(重寫規則刪除結尾的斜線,服務器再次將其添加,... )。

我解決了這個由DirectorySlash指令設置爲Off

DirectorySlash Off

我不知道這個解決方案有多好,我不覺得自己太有信心它TBH做。

無論如何,我想要做的是完全忽略「真實」的文件和目錄,因爲我不需要它們,反正我只用「虛擬」文件/目錄的相當URL。這可以讓我避免DirectorySlash解決方法/破解。

這可能嗎?

謝謝!

回答

4

這是因爲您也覆蓋了文件和文件夾請求。您應該在規則之前添加新的RewriteCond,這會告訴服務器應該只重寫不存在的項目。

代碼:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

我希望這有助於。

+0

確實如此,非常感謝! – user367217 2010-06-18 08:21:22

+1

不客氣;) – 2010-06-18 12:23:32