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

Apache 2.4.27 mod_rewrite в cgi-bin не работает

Apache 2.4.27 в Oracle Linux 7 x64.

Я могу звонить по телефону https://example.com/cgi-bin/helloworld.cgi.
Простой сценарий Perl возвращает «Hello, world via cgi-bin!»

Я могу правильно обращаться к статическому контенту в https://example.com/helloworld.html
Простой HTML-файл возвращает "Hello, world via html!"

я могу использовать RewriteRule так как:

RewriteRule "^/test" "/helloworld.html"

Я вижу "Привет, мир через html!"

Однако я не могу использовать RewriteRule как:

RewriteRule "^/test" "/cgi-bin/helloworld.cgi"

В результате получается 400 неверных запросов. Но как я могу назвать это напрямую?

Как мне получить RewriteRule работать, когда собираешься /cgi-bin? Кажется, это моя проблема. Я пробовал добавить [L] и [L,PT] но без помощи.

Я не уверен, что может быть не так в вашей конфигурации, как у вас ScriptAlias env установлен?

Я тестировал конфигурацию ниже, и все вроде бы нормально на Apache 2.4.10:

<VirtualHost 10.44.0.3:80>

    DocumentRoot "/vat/www/mysite"
    ServerName mysite.example.com
    ErrorLog "/var/log/apache2/mysite.example.com-error_log"
    CustomLog "/var/log/apache2/mysite.example.com-access_log" common

    ScriptAlias "/cgi-bin/" "/var/www/mysite/cgi-bin/"

    <Directory "/var/www/mysite">
          Require all granted
          Options Indexes FollowSymLinks MultiViews
          AllowOverride all
    </Directory>


    <Directory "/var/www/mysite/cgi-bin">
          Options +ExecCGI
          AddHandler cgi-script .cgi
    </Directory>


    RewriteEngine On
    RewriteRule "^/test" "/cgi-bin/test.cgi"

</VirtualHost>

открытие http://mysite.exmaple.com/test открывает скрипт cgi

Добавляю такую ​​же проблему. Когда я использовал:

RewriteRule "^/test" "/cgi-bin/helloworld.cgi"

Это не сработало. Мне пришлось использовать LogLevel alert rewrite:trace3 проверить журналы. В моем случае переписанный путь имел префикс document_root. Итак, вместо /cgi-bin/helloworld.cgi Я получал /var/www/html/cgi-bin/helloworld.cgi.

Для решения проблемы я использовал два флага:

RewriteRule "^/test" "/cgi-bin/helloworld.cgi" [NC,PT]

Этот вопрос связан с https://stackoverflow.com/questions/30065739/mod-rewrite-rewrite-url-to-point-to-cgi-script-but-keep-rewrite-hidden/30067581#30067581