Использование htaccess блокирует доступ к диапазону URL-адресов, кроме моего IP-адреса

Как я могу заблокировать диапазон или URL-адреса для всех, кроме моего IP-адреса.

So ...

Разрешить http://mydomain.com/* всем пользователям

Заблокировать http://mydomain.com/thisdirectoryandallcontents/* для всех, кроме моего IP-адреса

Я нашел некоторый код из другой сайт, который мог бы работать, но у меня нет навыков htaccess, чтобы адаптировать его

Options +FollowSymlinks
RewriteEngine on

#urls to exclude
RewriteCond %{REQUEST_URI} !/url-to-exclude-1$
RewriteCond %{REQUEST_URI} !/url-to-exclude-2$
RewriteCond %{REQUEST_URI} !^/images$
RewriteCond %{REQUEST_URI} !^/css$
RewriteCond %{REQUEST_URI} !^/$

#ip to allow access
RewriteCond %{REMOTE_HOST} !^11\.11\.11\.11$

#send to root
RewriteRule .? /http://www.mydomain.com [R=302,L]

person byronyasgur    schedule 29.04.2014    source источник


Ответы (1)


У меня есть похожее требование, и я делаю в основном то же самое, когда ставлю свою страницу (или ее часть) на техническое обслуживание. Содержимое файла htaccess выглядит так:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} /thisdirectoryandallcontents
RewriteCond %{REMOTE_ADDR} !=111.111.111.111
RewriteRule ^.*$ /maintenance.php [R=302,L]

Я объясню это шаг за шагом в соответствии с вашими требованиями:

  1. Каждый пользователь должен иметь доступ к главной странице http://mydomain.com/ — здорово, никаких настроек не требуется.
  2. Первый RewriteCond проверяет, лежит ли запрос в папке /thisdirectory и все содержимое.
  3. Второй RewriteCond проверяет, отличается ли IP-адрес от 111.111.111.111 (здесь вы должны написать свой IP-адрес).
  4. Если выполняются оба условия, мы перенаправляем пользователя на /maintenance.php. Здесь я обычно вывожу пользователю сообщение о том, что страница находится на обслуживании. Вы можете отобразить сообщение о том, что у пользователя нет доступа к /thisdirectoryandallcontents. Вместо того, чтобы перенаправлять пользователя на страницу обслуживания, вы также можете перенаправить его на домашнюю страницу, если хотите.
person meberhard    schedule 30.04.2014
comment
Кажется, это именно то, что я ищу, спасибо; но как мне сделать несколько каталогов. Я попробовал RewriteCond %{REQUEST_URI} /thisdirectoryandallcontents RewriteCond %{REQUEST_URI} /otherdirectory, но это не сработало. - person byronyasgur; 30.04.2014
comment
Да, это не работает, потому что несколько RewriteCond объединяются с логическим И, но вы не получаете доступ к обеим упомянутым папкам одновременно. Вместо этого используйте регулярное выражение, чтобы проверить, был ли запрошен какой-либо из каталогов. RewriteCond %{REQUEST_URI} ^(/thisdirectoryandallcontents|/otherdirectory).*$ - person meberhard; 30.04.2014
comment
Отлично, что сработало... но я предполагаю, что это должен быть аналогичный сценарий для нескольких IP-адресов. Вы знаете правильный синтаксис для этого? - person byronyasgur; 01.05.2014
comment
да, просто соедините их все в скобках и разделите вертикальной чертой: RewriteCond %{REQUEST_URI} ^(/dir1|/dir2|/dir3|/dir4|/dir5).*$ - person meberhard; 01.05.2014
comment
... на самом деле это был синтаксис для нескольких IP-адресов, который мне нужен. - person byronyasgur; 02.05.2014
comment
Теперь я думаю, что это работает по логическому И, поэтому нужно просто перечислить их вот так RewriteCond %{REMOTE_ADDR} !=111.111.111.111 RewriteCond %{REMOTE_ADDR} !=222.222.222.222... не так ли? - person byronyasgur; 02.05.2014
comment
да можно и так! - person meberhard; 02.05.2014