web-dev-qa-db-fra.com

Comment supprimer un sous-répertoire de l'URL avant de passer à un script?

Cela a été demandé le SO avant mais les réponses n'ont pas été généralisées. Alors voilà.

J'ai deux applications Web différentes. Ils ont été faits pour être sur différents serveurs à la racine. Mais maintenant, ils vont être placés dans des sous-répertoires sur le même serveur. Le script ci-dessous envoie le sous-répertoire avec les URI aux scripts. C'est un problème.

anciennes URL:

nouvelles URL:

Le site du magasin voit /store/items/1 quand il veut juste voir /items/1. Il en va de même pour le site backoffice.

Ma tentative:

    location /store {
            try_files @store_site;
    }

    location /backoffice {
            try_files @backoffice_site;
    }

    location @store_site {
            include uwsgi_params;
            uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
            proxy_set_header Host $Host;
    }

    location @backoffice_site {
            include uwsgi_params;
            uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
            proxy_set_header Host $Host;
    }

Encore une fois, le site du magasin obtient des URL avec le /store le préfixe et le backoffice obtiennent /backoffice. Ces sites ont été codés pour ne pas attendre ces préfixes. Je dois supprimer le /store et /backoffice préfixe avant l'envoi vers le site réel.

Est-ce une règle de réécriture?

J'ai essayé ceci basé sur this SO page et cela n'a pas fonctionné. Je ne dois pas comprendre quelque chose sur la syntaxe.

location /store {
        rewrite  ^/store/(.*) /$1;
        try_files $uri @store_site;
}

Mise à jour

Apparemment, cela fonctionne (ajouté break;) Est-ce une solution complète?

location /store {
        rewrite  ^/store/(.*) /$1 break;
        try_files $uri @store_site;
}
9
010110110101

Vous devez réécrire l'URI sans déclencher une redirection comme indiqué en utilisant break.

Selon les détails de votre configuration, si tout doit aller au backend ou si Nginx doit servir certaines requêtes telles que des fichiers statiques, vous aurez besoin soit ...

location /store {
    try_files $uri @store_site;
}

location /backoffice {
    try_files $uri @backoffice_site;
}

location @store_site {
    rewrite  ^/store/(.*) /$1 break;
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}

location @backoffice_site {
    rewrite  ^/backoffice/(.*) /$1 break;
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}

... ou

location /store {
    rewrite  ^/store/(.*) /$1 break;
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}

location /backoffice {
    rewrite  ^/backoffice/(.*) /$1 break;
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}
13
Dayo

Je vous suggère d'essayer ceci pour un article:

location /store/ {
    rewrite  ^/store/(.*) /$1 break;
    include uwsgi_params;
    proxy_set_header Host $Host;
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}

Je ne l'ai pas testé mais je pense que ça devrait marcher.

3
Nikolay Dimitrov