Назад | Перейти на главную страницу

Переменные среды недоступны на сервере после mod_rewrite, но работают локально

Я работаю на сайте, где я использую SSI для установки переменной на HTML-странице, которая анализируется, и переменная затем должна быть выбрана сценарием после mod_rewrite переписать. Это работает в моей локальной настройке, но по какой-то причине этого не происходит на производственном сервере (оба являются apache 2.2.22). Вот соответствующие биты:

В perl сценарий:

my $working = ($ENV{'HTTP_my_var'} || $ENV{'REDIRECT_HTTP_my_var'}) || "NO";
    
print "Content-type: text/html\n\n";
print "is it working? <b>$working</b>";

соответствующие строки из .htaccess

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ /$1.html [L]

RewriteRule ^my_tst$ /cgi-bin/my_tst.cgi [L]

HTML-файл:

 <!--#set var="HTTP_my_var" value="YES" -->
 <!--#include virtual="/cgi-bin/my_tst.cgi" -->
 <br>
 <!--#include virtual="/my_tst" -->

Это результат на моей локальной машине:

это работает? ДА

это работает? ДА

Но на рабочем сервере:

это работает? ДА

это работает? Нет

Сравнивая конфигурации серверов, единственное, что действительно приходит в голову, это то, что на рабочем сервере httpd -M не перечисляет apreq_module (shared), а локальный сервер не перечисляет fcgid_module (shared) (среди прочего). Может ли это быть из-за чего-то из этого? Что могло быть причиной этого странного несоответствия в поведении?

В случае необходимости упоминания, когда я делаю дамп %ENV, никто из REDIRECT_ * переменные появляются на производственном сервере в части перезаписи (вторая include директивы HTML), в то время как они работают на локальном сервере, и вывод директивы include без перезаписи.


Изменить: добавление другой переменной, HTTP_my_var2 который устанавливается в .htaccess через SetEnv директива не имеет проблем, т. е. значение не удаляется при перезаписи.

Однако установка переменной с помощью SetEnvIf вызывает проблему,


Edit1: Подтверждено, кажется, что между mod_suexec, mod_rewrite и mod_include (так же как mod_setenvif). Я успешно воспроизвел проблему локально, запустив ее с suexec включен. Отключение suexec, закомментировав SuexecUserGroup линия в VirtualHost запись (и перезапуск сервера) дает желаемые результаты. Теперь исследуем возможные решения.

На самом деле это может быть ошибка в apache httpd.