web-dev-qa-db-fra.com

Apache: URL de redirection du serveur WSGI interne

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?

2
Adam Matan

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.

3
Adam Matan