Могу ли я сделать if/then/else в htaccess?
-
22-07-2019 - |
Вопрос
У меня есть сайт, который предоставляет определенный контент на основе поддомена.Таким образом, это один и тот же набор файлов, и, возможно, заголовок и некоторая информация на страницах сайта меняются в зависимости от поддомена.
Мне также нужна другая аутентификация htpassword на основе субдомена, но я не могу найти информацию о том, как выполнить тип if/then в htaccess .
По сути, мне нужно следующее:
Если subdomain = 'abc' Используйте этот файл htpassword
Если subdomain = 'def' Используйте этот файл htpassword
Можно ли это сделать?
Решение
Попробуйте что-то вроде этого:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
Другие советы
какой веб-сервер вы используете?
метод, который может работать на нескольких разных серверах (он, безусловно, работает в apache), заключается в том, чтобы в каталоге, соответствующем каждому поддомену, был другой файл .htaccess.
Если бы это был я (а я раньше не думал об этом), я бы:
- Используйте внутреннее перенаправление, используя mod_rewrite к разным корням сайта (/suba или /subb) в зависимости от некоторых факторов (эмуляция IF/ELSE)
- Использовать символические ссылки в общедоступном каталоге, но не в .htaccess
так:
/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 для перенаправления (внутренне) в правильный корень сайта.я думать mod_rewrite запускается до загрузки .htaccess.
Это означает, что вы фактически обслуживаете одни и те же файлы сайта с разными .htaccess в зависимости от поддомена.
Надеюсь, это поможет, немного взломать.
Было бы интересно посмотреть, существует ли что-то лучше.
Вы не можете использовать if / else, потому что htaccess - это не список инструкций. Но если вы используете условный блок, такой как & Lt; IfModule mod_rewrite.c & Gt; или < IfDefine что-то > ;, вы можете использовать разные директивы в зависимости от того, какой поддомен запрашивается. Я не уверен, какой из них вы бы использовали, хотя ...
Вы также можете поместить один файл .htaccess на один уровень выше файлов и использовать < Directory что-то > указать разные правила для каждого субдомена, но сделать каталоги субдоменов символическими ссылками на один и тот же каталог с общими файлами.
так что это будет каталог над корнем (ами) сети:
.htaccess
sitefiles
subdomain1 (символическая ссылка на файлы сайта)
subdomain2 (символическая ссылка на файлы сайта)
...