Как я могу получить условный блок .htaccess?

Это вопрос Apache, с которым вы, вероятно, сталкивались раньше. Я хочу иметь один исходный пакет, который я могу развернуть на своей рабочей станции, на моем промежуточном сервере и на моем производственном сервере, но для загрузки разных параметров .htaccess в зависимости от того, каким был URL.

Обратите внимание, что я использовал kludge с вызовом IfModule, но это не будет работать с нашим новым производственным сервером, потому что он имеет все те же модули, что и мой промежуточный сервер.

Примечание. Мне нужно связать SetEnv с этими перезаписями. В настоящее время, если вы используете RewriteCond, он связан только с следующим RewriteRule, но не с SetEnv внизу.

Ответ 1

Вместо использования SetEnv используйте возможности настройки переменной окружения самого RewriteRule:

RewriteCond %{HTTP_HOST} =foo.com
RewriteRule ^ - [E=VARNAME:foo]

RewriteCond %{HTTP_HOST} =bar.com
RewriteRule ^ - [E=VARNAME:bar]

Хотя я предпочитаю делать такие вещи, передавая флаги процессу httpd при запуске и ищет их, используя блоки IfDefine.

<IfDefine FOO>
SetEnv VARNAME foo
</IfDefine>

<IfDefine BAR>
SetEnv VARNAME bar
</IfDefine>

Ответ 2

В Ubuntu Linux переменная IfDefine установлена ​​в

/etc/apache2/envvars

и называется APACHE_ARGUMENTS. Итак, в нижней части этого файла мне пришлось добавить:

export APACHE_ARGUMENTS="-D dev"

... и затем отскакивать от сервера:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

В других системах:

Однако здесь есть статья Debian по этой теме, где обсуждаются следующие здесь. В этом примере файл для редактирования:/etc/default/apache2, а переменная называется APACHE_DEFINES.

Аналогично, на некоторых системах это переменная с именем OPTIONS, которая установлена ​​в /etc/sysconfig/httpd.

Итак, вам действительно нужно найти начальный раздел в файле apache2ctl. Итак, начните с whereis apache2ctl, чтобы найти, где находится этот script, выйдите из него и найдите начальный раздел с директивой apache2 в нем и посмотрите, проходит ли переменная, которая проходит: OPTIONS, APACHE_ARGUMENTS, APACHE_DEFINES, или что-то еще. Затем посмотрите, какой файл вам нужно отредактировать путем экспериментов с помощью /etc/sysconfig/httpd, /etc/default/apache2 или /etc/apache2/envvars.

Ответ 3

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

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /

    RewriteCond %{HTTP_HOST} !^localhost
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>