次の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
はリダイレクトルールの有無にかかわらず問題なく機能します。
書き換えルールの何が問題になっていますか?
結果のURLをPT
に渡すには、[NC, L]
の代わりにWSGIScriptAlias
フラグが必要でした。
RewriteEngine On
RewriteRule ^/api$ /metadata [PT]
引用 マニュアル :
RewriteRuleのターゲット(または置換文字列)は、デフォルトではファイルパスと見なされます。 [PT]フラグを使用すると、代わりにURIとして扱われます。つまり、[PT]フラグを使用すると、RewriteRuleの結果がURLマッピングを介して返されるため、たとえばAlias、Redirect、ScriptAliasなどの場所ベースのマッピングにチャンスがある可能性があります。有効にするために。