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]