Le fichier Apache conf
suivant sert une application WSGI via le port 9002:
<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>
Le serveur WSGI répond à l'appel /metadata
et renvoie un JSON contenant des informations sur la disponibilité. Je voudrais alias /api
à /metadata
, afin que les appels à /api
soient réécrits comme des appels à /metadata
et envoyés au serveur WSGI interne.
J'ai activé mod_rewrite
sur le serveur Ubuntu:
Sudo a2enmod rewrite
Et ajouté la règle de réécriture suivante au fichier conf
:
RewriteEngine On
RewriteRule ^api/?$ /metadata [NC,L]
J'ai essayé d'ajouter la règle de réécriture après la section SSL
et à l'intérieur de la section Directory
, mais j'obtiens toujours une erreur Not Found
lorsque j'accède à /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.
Inutile de mentionner que /metadata
fonctionne sans problème avec ou sans la règle de redirection.
Une idée de ce qui ne va pas avec ma règle de réécriture?
J'avais besoin d'un indicateur PT
au lieu de [NC, L]
afin de transmettre l'URL de résultat à WSGIScriptAlias
:
RewriteEngine On
RewriteRule ^/api$ /metadata [PT]
Citant le manuel :
La cible (ou chaîne de substitution) dans un RewriteRule est supposée être un chemin de fichier, par défaut. L'utilisation de l'indicateur [PT] fait qu'il soit traité comme un URI. En d'autres termes, l'utilisation de l'indicateur [PT] entraîne la transmission du résultat de RewriteRule via le mappage d'URL, afin que les mappages basés sur l'emplacement, tels que Alias, Redirect ou ScriptAlias, puissent avoir une chance prendre effet.