2014-11-04 170 views
2

我遇到了.htaccess和PHP文件在子文件夾中的問題。我試圖實現的目的是防止任何人能夠訪問我的子文件夾中的任何文件 - 但我希望我的index.php能夠訪問這些文件。.htaccess - 拒絕訪問文件夾,但允許通過index.php訪問文件

DOCROOT/subfolder -> www.somewebsite.com/subfolder/somefile.php 
-> Access Denied 

[index.php] 
<form action="/subfolder/somefile.php"> 
... 
</form> 
-> Success! 

我很想只要使用的.htaccess來解決這個問題。我試過deny from all以及一些RewriteRule,但這些規則也會終止來自index.php的任何請求。 我試圖

Order deny,allow 
Deny from all 
Allow from 127.0.0.1 
Allow from somewebsite.com 
Satisfy Any 

但是從index.php文件的請求被拒絕。任何人都可以幫忙嗎?

回答

0
RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://www.hello.com/index.php 
RewriteRule .*subfolder/somefile\.php - [NC,F] 

第二行檢查訪問者是否不是來自某個url。第三行阻止他們訪問somefile.php

+0

不工作。從URL中阻止並通過index.php訪問。 – Urmir 2014-11-04 19:03:22

1

這是人們的誤解。僅僅因爲你是鏈接到來自另一個PHP文件的PHP文件並不意味着index.php文件正在訪問它們。最終用戶/瀏覽器是仍然訪問它們,它只是告訴你的index.php文件去哪裏。與它的訪問方式完全沒有關係。在這兩種情況下,它們都被瀏覽器訪問。

你可以做的最好的事情就是看看引用領域。可以很容易地僞造它,但這是你唯一能做的事情。

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^https?://(example.com|127\.0\.0\.1) [NC] 
RewriteRule ^subfolder/ - [L,F] 

其中「example.com」是您的網站。

+0

旁註Q:使用'RewriteCond%{HTTP_REFERER}'比'$ _SERVER ['HTTP_REFERER']更可靠,不能被操縱?按照http://stackoverflow.com/a/6023980/ – 2014-11-04 18:48:14

+0

@ Fred-ii- PHP的$ _SERVER ['HTTP_REFERER']'由apache填充,來自存儲'%{ HTTP_REFERER}'重寫變量。它們都來自HTTP請求頭的'Referer:'字段。他們都是一樣的。 – 2014-11-04 18:53:05

+0

看來這不起作用。只需輸入somewebsite.com/subfolder/somefile.php即可輕鬆訪問我的子文件夾中的文件。 – Urmir 2014-11-04 18:58:51

0

在你的.htaccess你可以重定向到文件的任何請求比的index.php如下其它該目錄內:

<directory "DOCROOT/subfolder"> 
    RewriteCond %{REQUEST_FILENAME} !=/DOCROOT/subfolder/index.php 
    RewriteRule ^/(.+)$ redirect.php [L] 
</directory> 
+0

''在htaccess文件中不允許容器,因爲htaccess文件已經是每個目錄的上下文。 – 2014-11-04 19:07:17

+0

獲取內部服務器錯誤500.並不確定我是否正確理解您的答案 - 您的代碼阻止訪問除index.php之外的任何文件,在相同的子消息文件中,對嗎? – Urmir 2014-11-04 19:08:24

+0

對不起,我的錯。您可以將上述內容放入您的虛擬主機配置中,或者您可以取出目錄標記並將內容放入DOCROOT /子文件夾內的.htaccess文件中 – 2014-11-04 19:12:21

相關問題