Назад | Перейти на главную страницу

htaccess разрешить, если не содержит строки

Я пытаюсь настроить файл .htaccess, который позволит пользователям обходить блокировку паролей, если они приходят из домена, который не запускается с предварительным просмотром. например http://preview.example.com вызовет пароль и http://example.com не стал бы.

Вот что у меня есть на данный момент:

SetEnvIfNoCase Host preview(.*\.)? preview_site
AuthUserFile /Users/me/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
AuthName "Development Area"
Require valid-user
Order deny,allow
Allow from 127
deny from env=preview_site
Satisfy any

Любые идеи?

Вы почти достигли цели, пара моментов:

Ваше регулярное выражение, хотя и действительное, также соответствует предварительному просмотру в другом месте URL-адреса (например, test.preview.example.com). Следующее соответствует только в том случае, если URL-адрес начинается с «предварительного просмотра».

SetEnvIfNoCase Host ^preview\. preview_site

Порядок необходимо изменить на «Разрешить, Запретить», потому что вы хотите, чтобы mod_access завершился ошибкой, когда совпадают оба оператора Deny и Allow. После сбоя mod_access будет вызываться mod_auth из-за "Satify Any".

Таким образом, это должно обеспечить поведение, которое вы ищете:

SetEnvIfNoCase Host ^preview\. preview_site
AuthUserFile /Users/me/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
AuthName "Development Area"
Require valid-user
Order Allow,Deny
Allow from All
Deny from env=preview_site
Satisfy Any