Oracle Linux 7x64上のApache2.4.27。
https://example.com/cgi-bin/helloworld.cgi
を適切に呼び出すことができます。
単純なPerlスクリプトは、「Hello、world viacgi-bin!」を返します。
https://example.com/helloworld.html
で静的コンテンツを適切に呼び出すことができます
単純なHTMLファイルは「Hello、world viahtml!」を返します。
RewriteRule
を次のように使用できます。
RewriteRule "^/test" "/helloworld.html"
「Hello、world viahtml!」が表示されます。
ただし、RewriteRuleを次のように使用することはできません。
RewriteRule "^/test" "/cgi-bin/helloworld.cgi"
これにより、400 BadRequestが発生します。直接呼べるのはどうしてですか?
/cgi-bin
に移動するときにRewriteRule
を機能させるにはどうすればよいですか?それが私の問題のようです。 [L]
と[L,PT]
を追加しようとしましたが、役に立ちませんでした。
構成のどこが間違っているのかわかりませんが、ScriptAlias
envをどのように設定しますか?
以下の構成でテストしましたが、Apache2.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
を取得していました。
この問題を解決するために、2つのフラグを使用しました。
RewriteRule "^/test" "/cgi-bin/helloworld.cgi" [NC,PT]