web-dev-qa-db-ja.com

Apache 2.4.27mod_rewriteからcgi-binへの失敗

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]を追加しようとしましたが、役に立ちませんでした。

2
AaronG

構成のどこが間違っているのかわかりませんが、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スクリプトを開きます

1
bocian85

私は同じ問題を追加します。私が使用したとき:

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]

この質問は https://stackoverflow.com/questions/30065739/mod-rewrite-rewrite-url-to-point-to-cgi-script-but-keep-rewrite-hidden/30067581#30067581

0
estibordo