Как сделать сложные условия в mod_rewrite? - PullRequest
0 голосов
/ 28 ноября 2011

Мне нужно запретить доступ ко всему сайту для всех, кроме некоторых IP-адресов. Также мне нужно разрешить доступ к одной папке сайта для всех:

Options +FollowSymLinks
Options +Indexes
RewriteEngine on

# Allow access only for devs
RewriteCond %{REMOTE_ADDR} !10.10.10.10 [NC] # First dev id
RewriteCond %{REMOTE_ADDR} !11.11.11.11 [NC] # Second dev id

# Allow direct access to files
RewriteCond %{REQUEST_FILENAME} !-f

# Redirecting guests
RewriteRule (.*) /coming/soon/index.html [R=307]

# But where to place this condition?
RewriteRule ^/?preview/?$ /preview/index.html [NC]


# Other rules for main site structure
# ...

Итак, мне нужен весь сайт, загружаемый только для разработчиков. Другие пользователи (гости) увидят страницу /coming/soon/ А также гостям разрешено видеть /preview/ страницу сайта.

Как это сделать?

1 Ответ

1 голос
/ 29 ноября 2011

Если ваша перезапись /preview/ подходит для всех пользователей и не зависит от последующих правил перезаписи, самый простой способ - сначала поставить этот RewriteRule с флагом [L], чтобы последующие перезаписи не применялись.

В противном случае исключения для RewriteRule могут быть указаны как RewriteCond, совпадающие с %{REQUEST_URI}:

RewriteCond %{REQUEST_URI} !^/?preview/?$ [NC]

Также обратите внимание, что предложенное вами правило переписывает и /preview, и /preview/ в /preview/index.html, и первое из этих переписываний может нарушить относительные ссылки, если не будет выполнено перенаправление.

...