0

Here's my current situation:

I'm rewriting /api to api.php.

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

Now, I am whitelisting IP's for it. However, when I try and use the Files directive to block access, I can't because it is being rewritten.

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

so, I tried just using it to block the rewritten directory

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

None of these have worked out.

4

2 回答 2

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 冲突。

于 2013-09-05T02:33:51.137 回答
0

不知道为什么第一个<Files>容器不工作。\应该没有任何影响。但是容器需要在api.php文件所在的目录或父目录中。

或者,您可以将其包含在您的 htaccess 中:

RewriteCond %{REMOTE_ADDR} ^24\.11\.95\.151$
RewriteRule ^/?api.php$ - [L,F]
于 2013-09-05T02:11:15.080 回答