2013-04-06 31 views
2

我有一個文件夾包含各種.php文件,我想阻止直接訪問它們,但是index.php。發送訪問被拒絕在apache上使用htaccess的錯誤,除了某個文件的所有文件

這是我到目前爲止,它似乎工作:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ /403.php/$1 [R=403] 
</IfModule> 

這是做了正確的方法是什麼?另外請注意,403.php文件夾中的文件實際上並不存在。

編輯:爲了更好地闡明我正在做的事 - 我有一個包含index.php文件的文件夾(我們可以假設名爲「includes」),以及index.php包含的各種其他文件。

我不希望用戶/惡意機器人/誰能夠直接訪問index.php以外的「includes」中的任何內容。

如果他們到達其他任何地方(無論文件是否存在),我想向瀏覽器發送403-拒絕訪問的HTTP響應代碼。

回答

2

正確的方法是使用F標誌,它只是返回一個403禁止的,你可以使用-作爲只是意味着目標「什麼也不做,讓URI穿過不變」:

RewriteEngine on 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ - [L,F] 

或者,您可以嘗試將條件與規則結合使用:

RewriteEngine on 
RewriteRule !index\.php$ - [L,F] 
+0

謝謝!你的重寫規則'RewriteRule ^(。*)$ - [L,F]'是絕對要走的路,更短,肯定比以前更正確。 – adriano72 2013-04-06 22:59:39

1

您可以創建錯誤頁面。實際上,一些控制面板有一個應用程序,允許用戶使用.shtml文件擴展名創建啓用了SSI的403 (禁止)頁面。在cPanel那個應用程序。有「錯誤頁面」其中發現「高級」部分,並且403頁面將保存在403.shtml基地名稱。如果您沒有找到這樣的應用程序,則只有在您的服務器配置爲允許此項時,纔可以手動創建啓用了SSI的HTML文件。如果這是不可能的,你仍然可以使用另一個擴展。

所以,比較正確的做法是重新映射存在的錯誤頁面,比如像這樣:

RewriteCond %{REQUEST_URI} !^/index\.php 
RewriteRule ^(.*) /403.shtml 

但無論如何,你想幹什麼?

相關問題