web-dev-qa-db-ja.com

Apache:内部WSGIサーバーのリダイレクトURL

次のApache confファイルは、ポート9002を介してWSGIアプリケーションにサービスを提供します。

<VirtualHost *:9002>
    SSLEngine on
    SSLCertificateFile /etc/Apache2/ssl/Apache.crt
    SSLCertificateKeyFile /etc/Apache2/ssl/Apache.key

    WSGIDaemonProcess matching-server user=ubuntu group=ubuntu threads=1
    WSGIScriptAlias / /var/www/matching-server/server.wsgi

    <Directory /var/www/matching-server>
        WSGIProcessGroup matching-server
        WSGIApplicationGroup %{GLOBAL}
        AllowOverride AuthConfig
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

WSGIサーバーは/metadata呼び出しに応答し、稼働時間情報を含むJSONを返します。 /api/metadataにエイリアスしたいので、/apiへの呼び出しは/metadataへの呼び出しとして書き換えられ、内部WSGIサーバーに送信されます。

Ubuntuサーバーでmod_rewriteを有効にしました:

Sudo a2enmod rewrite

また、次の書き換えルールをconfファイルに追加しました。

RewriteEngine On
RewriteRule    ^api/?$    /metadata    [NC,L]

SSLセクションの後とDirectoryセクション内に書き換えルールを追加しようとしましたが、Not Foundにアクセスすると/apiエラーが引き続き発生します。

Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

言うまでもなく、/metadataはリダイレクトルールの有無にかかわらず問題なく機能します。

書き換えルールの何が問題になっていますか?

2
Adam Matan

結果のURLをPTに渡すには、[NC, L]の代わりにWSGIScriptAliasフラグが必要でした。

RewriteEngine On
RewriteRule    ^/api$   /metadata    [PT]

引用 マニュアル

RewriteRuleのターゲット(または置換文字列)は、デフォルトではファイルパスと見なされます。 [PT]フラグを使用すると、代わりにURIとして扱われます。つまり、[PT]フラグを使用すると、RewriteRuleの結果がURLマッピングを介して返されるため、たとえばAlias、Redirect、ScriptAliasなどの場所ベースのマッピングにチャンスがある可能性があります。有効にするために。

3
Adam Matan