2012-03-09 46 views
9

我在我的.htaccess中重寫它從文件中刪除php擴展,例如so.com/question.php轉換爲so.com/問題刪除.PHP與擴展的.htaccess沒有打破的DirectoryIndex

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

然而,這也打破了默認DirectoryIndex的行爲,這只是打字的目錄重定向到索引文件的文件夾中,例如so.com/answer顯示器so.com/answer/index.php

只需將上述代碼與DirectoryIndex index.php組合不同時實現的結果。

有人可以幫我組合這兩個函數,或者重寫代碼來排除index.php文件,這會達到相同的結果嗎?

回答

24

我想你只需要驗證該文件存在做重寫之前,這樣你會離開404種DirectoryIndex的行爲不變:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [NC,L] 

(未測試)

+0

完美地工作,謝謝。 – ajcw 2012-03-09 14:37:19

+0

@TimothéeGroleau不錯的代碼,有沒有任何選項可以刪除主頁上的'index.php'? – Muhammed 2013-04-02 03:47:47

+0

感謝隊友,這工作像一個魅力:) – jycr753 2013-06-22 22:43:48

2
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA] 

驗證文件和文件夾,還有,添加RewriteBase/

+1

這一個給出了一個內部服務器錯誤:( – ajcw 2012-03-09 14:36:49

+0

奇怪...你也添加引擎?:) – Crsr 2012-03-09 14:54:29

+0

是的,我包括'RewriteEngine On' :) – ajcw 2012-03-09 14:56:48