Как вы используете директиву Apache «ScriptInterpreterSource Registry-Strict»? - PullRequest
7 голосов
/ 19 декабря 2008

Я запускаю веб-сервер Apache в Windows, чтобы работать с некоторыми сценариями Perl CGI. в процессе производства эти сценарии выполняются на linux box, а в репозитории исходного кода у них у всех есть шебанги вроде: #!/usr/bin/perl, но на моей машине с windows шебанги будут #!c:\perl\bin\perl.exe, поэтому у меня конфликт с базой исходного кода.

введите директиву Apache ScriptInterpreterSource .

Я пытался заставить его работать, основываясь на том, что я могу гуглить. но пока не повезло. у меня есть:

  1. добавил эти вещи в соответствующую директиву Разрешить переопределение Нет
    Опции Индексы FollowSymLinks ExecCGI Заказать разрешить, отказать Разрешить от всех ScriptInterpreterSource Registry-Strict

  2. добавлено: Cgi-скрипт AddHandler .cgi

  3. отредактировал мой реестр и добавил новую строку в

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command=C:\Perl\bin\perl.exe

Теперь я знаю, что CGI работают на этом сервере до тех пор, пока у них есть правильный шебанг.

, но когда я пытаюсь получить доступ к CGI без шебанга, выдается лог журнала Apache:

Не найден глагол Exec CGI для файлов введите ".cgi"

Будем благодарны за любые мысли, идеи или даже догадки.

спасибо.

Ответы [ 3 ]

9 голосов
/ 22 декабря 2008

Похоже, что строка ScriptInterpreterSource игнорируется. Если установлено значение Registry или Strict-Registry, следует игнорировать строки shebang и использовать реестр only .

Кроме того, Документы Apache 2.2 имеют несколько другое расположение раздела реестра:

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command\(Default) => C:\Perl\bin\perl.exe -wT
2 голосов
/ 18 июля 2015

Это работает и для скриптов Python. Я сделал следующее, чтобы исправить мою установку Apache, чтобы игнорировать требование shebang в моих скриптах. Без этого shebang требуется в текущей версии Apache 2.4 - или, по крайней мере, он был у меня.

# tell apache to use registry - this requried a registry hack
# to the following: 
# [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command] = "c:\\python\\python.exe"
ScriptInterpreterSource Registry-Strict
0 голосов
/ 24 декабря 2008

Вместо запуска вашего Perl-кода в отдельных процессах CGI, рассмотрите возможность использования mod_perl (см. http://perl.apache.org).

Mod_perl намного эффективнее, так как код Perl загружается и анализируется только один раз, а затем запускается непосредственно в процессах Apache без необходимости запуска или взаимодействия с другими процессами.

...