Подтвердить что ты не робот

Блоки кода кода доменного имени в 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" ){

}

Буду признателен за любую помощь или указатели, которые вы, ребята, можете дать.

4b9b3361

Ответ 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 или выделенный хостинг.