2014-10-07 73 views
3

我有這些的RewriteRules文件的.htaccess:htaccess的阻止訪問.PHP只允許帶有重寫規則

RewriteEngine On 
RewriteRule ^login$ login.php [L] 
RewriteRule ^index$ index.php [L] 
RewriteRule ^page/([^/]+)/?$ page.php?id=$1 [L,QSA] 

這是可能的,以防止這些文件的直接訪問,但只允許訪問與重寫規則

例如,如果有人打電話:「domain.com/ 登錄」應該看到頁面。

但是,如果有人稱之爲「domain.com/ 的login.php」不應該(在這種情況下,應該可以看到一個403或404錯誤)

回答

1

你可以有額外的規則,用於阻塞.php直接訪問文件:

RewriteEngine On 

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

RewriteRule ^page/([^/]+)/?$ page.php?id=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] 
RewriteRule ^(.+?)/?$ /$1.php [L] 
+0

THX工作,因爲我必須防止很多很多的網頁訪問,是不可能性有一條規則爲每個頁面或單個規則的所有PHP頁面? – ipel 2014-10-07 10:50:30

+0

是'.php'的單個規則可以在那裏,請參閱更新後的代碼。 – anubhava 2014-10-07 12:31:36

0

您可以加入這一行

RewriteRule login.php$ 403.php 

編輯:

對不起,這不會因爲內部重定向的

試試這個

RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteRule login.php$ 403.php [L] 
+0

白這個規則頁面「login.php」將被阻止,但頁面「登錄」也:( – ipel 2014-10-07 11:10:13