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

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

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

В основном мне нужно вот что:

if subdomain = 'abc' используйте этот файл htpassword

if subdomain = 'def' используйте этот файл htpassword

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

Ответы [ 4 ]

3 голосов
/ 06 августа 2009

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

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

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>
0 голосов
/ 05 августа 2009

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

  1. Использование внутреннего перенаправления с использованием mod_rewrite для различных корней сайтов (/ suba или / subb) в зависимости от некоторых факторов (эмуляция IF / ELSE)
  2. Используйте символические ссылки в общем каталоге, но не .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 в зависимости от субдомена.

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

Было бы интересно узнать, существует ли что-то лучшее.

0 голосов
/ 05 августа 2009

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

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

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

0 голосов
/ 05 августа 2009

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

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

...