Я могу сделать if/then/else в htaccess?

Одно быстрое примечание здесь по производительности, связанной с ловлей исключений.

, Когда путь выполнения вводит блок 'попытки', ничего волшебного не происходит. Нет никакой инструкции 'по попытке' и никакой стоимости, связанной или с вводом или с выходом из блока попытки. Информация о блоке попытки хранится в метаданных метода, и эти метаданные используются во времени выполнения каждый раз, когда исключение повышено. Механизм выполнения спускается со стека, ища первый вызов, который содержался в блоке попытки. Любые издержки, связанные с обработкой исключений, происходят только, когда исключения выдаются.

7
задан Kev 6 August 2009 в 11:04
поделиться

4 ответа

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

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

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>
3
ответ дан 7 December 2019 в 16:44
поделиться

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

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

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

0
ответ дан 7 December 2019 в 16:44
поделиться

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

  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 в зависимости от субдомена.

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

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

0
ответ дан 7 December 2019 в 16:44
поделиться

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

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

0
ответ дан 7 December 2019 в 16:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: