Apache 2.4.27 mod_rewrite 到 cgi-bin 失败

Apache 2.4.27 mod_rewrite 到 cgi-bin 失败

Oracle Linux 7 x64 上的 Apache 2.4.27。

我可以正确调用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"

我看到了“Hello, world via html!”

但是,我不能使用 RewriteRule 作为:

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

这会导致 400 Bad Request。但是我怎样才能直接调用它呢?

RewriteRule当我要去 时,如何才能让我的工作/cgi-bin?这似乎是我的问题。我尝试添加[L][L,PT]没有帮助。

答案1

我不确定您的配置可能出了什么问题,您是如何ScriptAlias设置环境的?

我已经使用以下配置进行了测试,在 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/测试打开 cgi 脚本

答案2

我添加了同样的问题。当我使用时:

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

相关内容