2013-07-17 83 views
0

我有一個.htaccess文件如下:Apache據說忽略htaccess指令?

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

RewriteCond %{REQUEST_FILENAME} !admin\.php$ 
RewriteCond %{REQUEST_FILENAME} \.php$ 
RewriteRule ^.*$ - [G] 

RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

什麼是應該做的,是如果該文件是一個有效的文件沒有什麼應該發生(該文件應該被正常處理) - 此工程。

接下來,如果文件的擴展名是.php,但不是admin.php,那麼它應該返回410 Gone狀態。這不起作用 - 它總是轉到下一個指令,而第二個塊被忽略。

示例URL:http://<my site>/file.php - 不返回410,轉到最後的指令。

這是怎麼發生的?

(另外,我不認爲計算器是這個問題的網站,但我想不出是什麼:/)

編輯:我也許應該指出的是,這工作正常在我的Windows本地主機,但不是在我的現場Linux服務器上。

編輯2:它仍然不能在我的活箱上工作,點逃脫。如果我將第二個塊移到第一個塊上面,那麼所有東西都會被放棄。

+0

你忘了不幸逃避'的RewriteCond%{} REQUEST_FILENAME期間.PHP $' –

+0

@PatrickEvans,它仍然無法工作,即使在轉義點之後( –

回答

0

用戶目錄之一中是否存在.htaccess文件?如果是這樣,那麼問題可能是你需要在你的apache配置中指定AllowOverride。有關更多信息,請參見http://httpd.apache.org/docs/2.0/howto/htaccess.html

+1

),重寫正在處理中,因爲他說某些重寫有效,而其他重寫不起作用。如果AllowOverride錯誤 –

0

http://<my site>/file.php不給GONE消息,因爲你必須在這之前的規則:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

這意味着忽略了一個真正的文件,鏈接或目錄的.htaccess規則。如果你想顯示GONE消息.php文件,然後排除這種跳躍規則.php文件是這樣的:

RewriteCond %{REQUEST_FILENAME} !\.php$ [NC] 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
+0

這些文件不存在。 –

+0

抱歉,您不瞭解您的評論。哪個文件不存在? – anubhava

+0

域名將要訪問的php文件。它們不存在,所以第一批指令不應匹配。 –