这是我目前的情况:
我正在重写/ 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>
这些都没有成功。
答案 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 -
或者,如果您无权访问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]