Блоки кода кода доменного имени в htaccess
У нас есть локальные серверы, центральные разработчики, серверы и серверы. Однако разработчики и разработчики защищены по очевидным причинам. Поэтому после развертывания каких-либо изменений в htaccess мне нужно вручную отредактировать файл htaccess, чтобы включить защиту паролем на dev и промежуточном сервере.
Есть ли способ иметь условные блоки на основе имени домена, например:
if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
AuthName "Password Protected Area"
AuthType Basic
AuthUserFile /somewhere/.htpasswd
Require valid-user
}
Мне нужно найти эквивалент htaccess условия:
if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
}
Буду признателен за любую помощь или указатели, которые вы, ребята, можете дать.
Ответы
Ответ 1
Выполняя это через VirtualHost, а не .htaccess, намного лучше, вы можете использовать следующее решение, если модуль setenvif активен:
SetEnvIf Host ^dev\.site\.com$ is_on_dev_site
SetEnvIf Host ^staging\.site\.com$ is_on_dev_site
Order deny,allow
Deny from env=is_on_dev_site
# require password if access would otherwise be denied
Satisfy any
# Put your password auth stuff here
Вы также можете сделать это с помощью белого списка, который, вероятно, лучше, поскольку он гарантирует, что ваши сайты-разработчики будут защищены, даже если кто-то решит разрешить доступ к ним через www.dev.site.com и т.д.:
SetEnvIf Host ^site\.com$ is_on_public_site
SetEnvIf Host ^www\.site\.com$ is_on_public_site
Order deny,allow
Deny from all
Allow from env=is_on_public_site
Satisfy any
# Put your password auth stuff here
Если у вас нет mod_setenvif на вашем сервере, mod_rewrite также может выполнить вашу работу (замените блоки SetEnvIf в примере с белым списком следующим образом):
RewriteEngine On
RewriteCond %{HTTP_HOST} =site.com
RewriteRule ^ - [E=is_on_public_site:yes]
RewriteCond %{HTTP_HOST} =www.site.com
RewriteRule ^ - [E=is_on_public_site:yes]
Ответ 2
Я нашел хорошее решение, чтобы отличить "localhost" против "live":
Поскольку условия htaccess несколько ограничены, почему бы не согласиться на IfModule?: Сравните модули, которые у вас есть (т.е. используйте и ищите значительную, надеюсь долговременную разницу, например, если вы разрабатываете на окнах и развертываете на linux mod_win32.c может быть хорошим. (Не забудьте добавить .c, который phpinfo() омрит.)
Тогда вы можете сделать это как это (проверено):
<IfModule mod_win32.c>
RewriteRule ^banana$ test.php?dudeThisIsLocal=1
</IfModule>
<IfModule !mod_win32.c>
RewriteRule ^banana$ test.php?dudeThisIsLive=1
</IfModule>
В этом примере делается хороший тест на здравомыслие, бросая на ваш домен/банана или. localhost/banana, и если вы (с включенной перезаписью) выгрузите массив $_GET в test.php. Если это работает, заполните коды с помощью реальных конфигурационных утверждений.
Ответ 3
Вы должны сделать это в своем файле conf conf с помощью:
<VirtualHost domain.com:80>
...config statements here
</VirtualHost>
и
<VirtualHost domain2.com:80>
....config statements here
</VirtualHost>
Если у вас есть хост, который не позволяет редактировать файл конфигурации вашего сайта, что является реальной возможностью, если вы используете общий хост, вам следует рассмотреть VPS или выделенный хостинг.