82 votes

Comment puis-je créer un emplacement dans nginx qui fonctionne avec ET sans slash de fin ?

Actuellement, j'ai cette configuration :

location ~ ^/phpmyadmin/(.*)$
{
        alias /home/phpmyadmin/$1;
}

Cependant, si je visite www.mysite.com/phpmyadmin (notez l'absence de barre oblique), il ne trouve pas ce que je cherche (404). Je suppose que c'est parce que je n'ai pas inclus la barre oblique de fin. Comment puis-je résoudre ce problème ?

2voto

Avez-vous essayé d'utiliser try_files directive ?

try_files $uri $uri/ =404;

2voto

Lorsque vous utilisez proxy_pass avec un emplacement donné par une chaîne de préfixe plutôt que par une expression régulière, Nginx s'occupera du slash de fin pour vous, comme décrit dans la section les docs :

Si un emplacement est défini par une chaîne de préfixe qui se termine par le caractère slash, et que les demandes sont traitées par l'un des proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass ou grpc_pass, le traitement spécial est effectué. En réponse à une demande dont l'URI est égal à cette chaîne, mais sans le slash de fin, une redirection permanente avec le code 301 sera renvoyée vers l'URI demandé avec le slash ajouté. Si cela n'est pas souhaité, une correspondance exacte de l'URI et de l'emplacement peut être définie comme suit :

location /user/ {
   proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

1voto

Jeremy Points 21

Je l'ai fait comme ça

rewrite ^/promo/?$     http://example.com/promo/page43902.html;
location /promo/ {
    root /var/www;
}

1voto

Ujjwal Singh Points 1733

Pourquoi ne pas mettre deux réécritures simplement :

location ~ ^/phpmyadmin
{
    rewrite /phpmyadmin /home/phpmyadmin/ break;
    rewrite /phpmyadmin/(.*) /home/phpmyadmin/$1 break;
}

0voto

Gavin Curtis Points 609

Si vous avez également besoin proxy_pass il est préférable de passer des arguments aussi :

location ~/phpmyadmin/?(.*)$ {                                                                                           
         proxy_pass http://server/$1$is_args$args;

Cela dit, je suggère personnellement de ne JAMAIS utiliser phpmyadmin en production. Vous comprendrez pourquoi en vérifiant les journaux d'accès de votre serveur web public... (beaucoup de bots essayant d'exploiter phpmyadmin).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X