Я пытаюсь установить переменные среды в своем файле .htaccess
на основе домена верхнего уровня сервера. Но после совпадения условия файл .htaccess
дальше не выполняется.
Если нет соответствующего домена, _rooturl_
устанавливается, а _rootfolder_
нет. Однако, когда домен совпадает, _rootfolder_
устанавливается, а _rooturl_
нет. Это также относится к любым другим перенаправлениям, определенным после этого.
(...)
<If "req('Host') =~ /domain.com/ || req('Host') =~ /localhost/">
RewriteRule .* - [E=_rootfolder_:www.domain.com]
</If>
<If "req('Host') =~ /domain.de/">
RewriteRule .* - [E=_rootfolder_:www.domain.de]
</If>
RewriteRule .* - [E=_rooturl_:domainname]
(...)
TL; DR, я хочу, чтобы мой код выполнялся после прохождения условий IF.
Вы можете попробовать этот блок правил, полностью основанный на mod_rewrite
правилах:
RewriteEngine On
RewriteCond %{HTTP_HOST} (localhost|domain\.com) [NC]
RewriteRule ^ - [E=_rootfolder_:www.domain.com]
RewriteCond %{HTTP_HOST} domain\.de [NC]
RewriteRule ^ - [E=_rootfolder_:www.domain.de]
RewriteRule ^ - [E=_rooturl_:domainname]
Вы также можете сделать это с помощью mod_setenvif:
SetEnvIf Host "(localhost|domain\.com)" _rootfolder_=www.domain.com
SetEnvIf Host "domain\.de" _rootfolder_=www.domain.de
SetEnvIf Host ^ _rooturl_=domainname
Но после совпадения условия файл
.htaccess
дальше не выполняется.
Хотя этого не должно происходить с директивами, которые вы опубликовали. Он должен «работать» по назначению. Но это может зависеть от того, какие другие директивы у вас есть, которые зависят от этих env vars. И в какой-то степени именно то, какие выражения и директивы вы используете.
Здесь есть несколько потенциальных проблем:
<If>
контейнеры меняют порядок обработки. Содержимое блоков <If>
обычно объединяется очень поздно, однако директивы mod_rewrite по-прежнему обрабатываются перед директивами mod_rewrite в том же контексте, независимо от того, где контейнеры <If>
появляются в порядке директив.
Если вы не включите наследование mod_rewrite (например, RewriteOptions Inherit
), директивы mod_rewrite в более поздних <If>
блоках полностью переопределяют директивы mod_rewrite в более ранних <If>
блоках. (Точно так же директивы mod_rewrite в файле подкаталога .htaccess
полностью переопределяют директивы mod_rewrite в родительском файле .htaccess
.) Это нормально, если выражения <If>
являются взаимоисключающими или вы ожидаете, что более поздние директивы переопределяют (а не добавляют) более ранние директивы.