带有重写的特定文件.htaccess的白名单IP

时间:2013-09-05 02:00:48

标签: php apache .htaccess

这是我目前的情况:

我正在重写/ api到api.php。

RewriteRule ^apidir/url/new?$ api.php [QSA,NC,L]

现在,我正在将IP列入白名单。但是,当我尝试使用Files指令来阻止访问时,我不能,因为它正在被重写。

<Files "\api.php">
order allow,deny
allow from all
deny from 24.11.95.151
</Files>

所以,我试过用它来阻止重写的目录

<Files "\apimashape2013/url/new">
order allow,deny
allow from all
deny from 24.11.95.151
</Files>

这些都没有成功。

2 个答案:

答案 0 :(得分:1)

如果您有权使用virtualhost,则可以使用此功能:

RewriteEngine on
RewriteMap hosts-deny txt:/home/youraccount/deny_list.txt
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
RewriteCond %{REQUEST_URI} ^/api [NC]
RewriteRule ^ - [F]

deny_list.txt列出您希望列入黑名单的IP或主机列表:

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

Read more here.


或者,如果您无权访问virtualhost,则可以将php文件的名称更改为唯一的名称,例如thisismyapi.php并将其用作此类:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

<Files "thisismyapi.php">
order allow,deny
allow from all
deny from 24.11.95.151
</Files>

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !thisismyapi.php
RewriteRule ^api/?(.*)$ /api/thisismyapi.php [L]

为什么要将其更改为其他名称?

因为这样它可以在任何地方匹配它,所以它应该可以很好地满足您的需求,并且不会与其他文件冲突。

例如以这种方式将文件命名为index.php,它会与其他文件夹中的index.php冲突。

答案 1 :(得分:0)

不确定为什么第一个<Files>容器无效。 \不应该有任何影响。但容器需要位于api.php文件所在的目录或父目录中。

或者,您可以在htaccess中包含此内容:

RewriteCond %{REMOTE_ADDR} ^24\.11\.95\.151$
RewriteRule ^/?api.php$ - [L,F]