2017-01-23 2 views
1

Я хочу полностью отказаться от доступа к некоторым IP-адресам на моем веб-сайте. Кроме того, я хотел бы запретить доступ для некоторых других IP-адресов только к определенному файлу. Проблема в том, что второе правило, похоже, переопределяет первое.Объединить несколько правил FilesMatch в htaccess

<FilesMatch ""> 
order allow,deny 
allow from all 
deny from 1.1.1.1 
</FilesMatch> 

<FilesMatch "^file\.exe$"> 
order allow,deny 
allow from all 
deny from 2.2.2.2 
</FilesMatch> 

В этом раздели вниз пример 1.1.1.1 будет иметь доступ к file.exe хотя он был фактически блокирован первым правилом.

Ожидаемый результат: 1.1.1.1 не имеет доступа ко всему (включая файл.exe), 2.2.2.2 имеет доступ к веб-сайту, но не файл.exe.

Что я делаю неправильно?

ответ

0

Добавить deny from 1.1.1.1 во второй. Как вы говорите, allow from all во втором блоке переопределяет первое значение для file.exe. Также удалите пустой файл-файл для первого, он ничего не делает.

order allow,deny 
allow from all 
deny from 1.1.1.1 

<FilesMatch "^file\.exe$"> 
order allow,deny 
allow from all 
deny from 1.1.1.1 
deny from 2.2.2.2 
</FilesMatch> 

Или более простой подход, вы можете попробовать это:

order allow,deny 
allow from all 
deny from 1.1.1.1 

<FilesMatch "^file\.exe$"> 
deny from 2.2.2.2 
</FilesMatch> 

Пожалуйста, дайте мне знать, как вы получите на.

+0

Ну, у меня тоже была эта мысль, но 1.1.1.1 - всего лишь короткий пример. На самом деле есть живой список из 20 строк + комментарии. Я определенно не хочу создавать избыточность здесь, которая должна поддерживаться синхронно. Кроме того, ваш второй пример, скорее всего, не хватает вашей предложенной строки. Помимо того, что это исключает область FilesMatch, каким-то образом кажется, что это мешает остальному файлу htaccess. Вместо 403 я получаю ERR_TOO_MANY_REDIRECTS. Но это лишь побочный узел, указывающий на то, что пустой FileMatch каким-то образом имеет смысл. – CodeX

+0

Проблема с перенаправлением связана с 'ErrorDocument 403 /' - я удалил это для тестирования и найду другое решение для этого, если я смогу заставить ваше предложение работать. Проблема с вашим вторым предложением состоит в том, что он, по-видимому, неявно переопределяет оператор allow, поэтому file.exe можно получить из 1.1.1.1. Вы можете заменить это на 127.0.0.1 или :: 1, чтобы легко попробовать это локально самостоятельно, если вы как. – CodeX

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