1 votes

réécriture de toutes les extensions .html et suppression de l'index dans Nginx

Comment supprimer toutes les extensions .html ainsi que toutes les occurrences de index.html d'une chaîne d'URL dans Nginx ?

http://www.mysite/index.html a http://www.mysite http://www.mysite/articles/index.html a http://www.mysite/articles http://www.mysite/contact.html a http://www.mysite/contact http://www.mysite/foo/bar/index.html a http://www.mysite/foo/bar

EDIT : Voici mon fichier de configuration :

serveur {

    listen 80;

    server_name staging.mysite.com;
    root /var/www/staging.mysite.com;
    index  index.html index.htm;

    access_log /var/log/nginx/staging.mysite.com.log spiegle;

    #error_page 404         /404.html;
    #error_page 500 503     /500.html;

    rewrite ^(.*/)index\.html$ $1;
    rewrite ^(/.+)\.html$ $1;

    rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
    rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

    location / {
            rewrite ^/about-us /about permanent                                                                                      
            rewrite ^/contact-us /contact permanent;  

            try_files  $uri.html  $uri/ /index.html;
    }

}

1voto

knb Points 2521

La réponse acceptée n'a pas semblé fonctionner pour moi. Je suis un gars d'Apache qui est en train de faire le changement, donc cela peut ne pas fonctionner à 100% dans toutes les circonstances, mais cela semblait fonctionner sur mon site (pages html statiques, juste un test) :

index index.html;
error_page 404 404.html;
rewrite ^(/.+)\.html$ $1;
try_files $uri.html $uri/ =404;

C'est ce qui fait que ça arrive :

  • url => fichier auquel il accède
  • domain.com/ => index.html
  • domain.com/somepage => somepage.html
  • domaine.com/arandompage => 404.html

J'espère que cela aidera d'autres anciens apache-istes confus.

-1voto

DigitalMC Points 111

En tant que réécriture (transmettre l'URL dépouillée au système de fichiers/backend sans changer l'URL montrée au client) :

rewrite ^(.*/)index\.html$ $1;
rewrite ^(/.+)\.html$ $1;

Ou bien vous pouvez faire une redirection 301 (le client fait une nouvelle demande) :

rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

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