2013-09-05 3 views
0

Вот моя текущая ситуация:Белые список IP-адреса для определенного файла .htaccess с переписыванием

Я переписывание/апите к 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

Вы пробовали файл 'Files'directive перед переписыванием? –

+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-адресов или HOST вы хотите занести в черный список:

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 в других папках.

0

Не знаете, почему первый контейнер <Files> не работает. \ не должен иметь никакого эффекта. Но контейнер должен находиться в каталоге или родительском каталоге, где находится файл api.php.

В качестве альтернативы, вы можете включить это в вашем Htaccess:

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

Мне нужно сделать это для огромного набора IP-адресов, поэтому я надеялся, что смогу использовать директивы 'allow' и' deny'. –

+0

@IanCarroll Когда я скопировал ваше правило и ваш первый контейнер '', он не работает. Когда я удаляю '\' из '' \ api.php'', он работает. –

Смежные вопросы