2013-04-11 78 views
0

我有我的自定義錯誤頁面/errors/404.php我希望能夠在Apache無法找到文件時使用,但我希望它不能被通過簡單地請求URL http://mywebsite/error/404.php使用。不允許通過URL訪問錯誤頁面使用mod_rewrite

我目前有一個規則,阻止訪問我所有的PHP文件(因爲我使用URL重寫,使用戶友好的網址),但這似乎也停止閱讀錯誤頁面由於錯誤頁面匹配Apache拒絕訪問php文件的規則。

我該如何正確地做到這一點?

/.htaccess內容:

RewriteEngine On 
RewriteRule ^home/?$  /index.php [NC,L] 
RewriteRule ^lessons/?$ /lessons.php [NC,L] 

# Don't allow access to the actual php files. 
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC] 
RewriteRule ^.*$   -     [R=404,L] 

ErrorDocument 404 /errors/404.php 
+0

'/ errors /'目錄下是否有htaccess文件?我複製並粘貼到香草apache安裝空白htaccess文件,它工作正常。 –

+0

不,沒有'/ errors /'除了'404.php'。如果您嘗試瀏覽到'/ somefile.php'會怎麼樣?我的一個顯示了默認的404頁面,並且還提到嘗試顯示404頁面時出現了500錯誤。這是因爲遞歸。 – DanielGibbs

+0

我看到了我的自定義錯誤頁面。你不應該得到一個500的內部遞歸,因爲條件檢查'%{THE_REQUEST}'而不是'%{REQUEST_URI}'。 –

回答

1

你可以試試這個:

# Don't allow access to the actual php files. 
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC] 
RewriteCond %{REQUEST_URI} !/errors/404\.php [NC] 
RewriteRule ^.*$ -  [R=404,L] 

RewriteCond %{THE_REQUEST} \s/errors/404\.php [NC] 
RewriteRule .? - [F] 

ErrorDocument 404 /errors/404.php 
  1. 所有請求.php文件重定向到/errors/404.php腳本。
  2. 所有對不存在的文件或目錄的請求都被重定向到/errors/404.php腳本(ErrorDocument 404 /errors/404.php指令在這種情況下適用)。
  3. 所有對/errors/404.php的直接請求都會返回一個403 Forbidden狀態碼。
+0

直到週末之後,我纔會回到uni,但當我回來並讓你知道時,我一定會檢查它。 – DanielGibbs

相關問題