Могу ли я сделать if/then/else в htaccess?

У меня есть сайт, который обслуживает определенный контент на основе поддомена. Таким образом, это тот же набор файлов, и, возможно, заголовок и некоторая информация на страницах сайта изменяется на основе поддомена.

Мне нужно иметь другую аутентификацию htpassword на основе поддомена, но не могу найти информацию о том, как сделать тип if/then в htaccess .

в основном то, что мне нужно, это:

Если поддомен = 'abc' используйте это htpassword файл

Если поддомен = 'def' используйте этот файл htpassword

можно ли это сделать?

4 ответов


попробуйте что-то вроде этого:

SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>

какой веб-сервер вы используете?

метод, который может работать на нескольких разных серверах (он, безусловно, работает в apache), должен иметь другой .htaccess файл в каталоге, соответствующем каждому поддомену.


Если бы это был я (и я не думал делать это раньше), я бы:

  1. используйте внутреннее перенаправление с помощью и mod_rewrite к различным корням сайта (/suba или/subb) в зависимости от некоторых факторов (эмуляция IF / ELSE)
  2. использовать ссылки в общем каталоге, но не .реврайт

так:

/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub

здесь

/sites/subdomain_a/pub == /sites/subdomain_b/pub

используя

ln -s

или аналогичные. Затем используйте mod_rewrite для перенаправление (внутренне) в правый корень сайта. Я!--22-->думаю mod_rewrite запускается раньше .htaccess был загружен.

Это означает, что вы эффективно обслуживает одни и те же файлы сайта с другой .htaccess в зависимости от поддомена.

надеюсь, это поможет, немного взломать.

было бы интересно посмотреть, существует ли что-то лучше.


вы не можете использовать if/else, потому что htaccess не является списком инструкций. Но, если вы используете условный блок, например или , вы можете использовать различные директивы, основанные на том, какой субдомен запрашивается. Я не уверен, какой из них вы бы использовали...

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

таким образом, это будет каталог выше веб-корня(ов):
.реврайт
sitefiles
subdomain1 (символическая ссылка на sitefiles)
subdomain2 (символическая ссылка на sitefiles)
...