Как я могу получить условный блок .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>