1 votes

Réécrire toutes les extensions .html et supprimer 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 à http://www.mysite http://www.mysite/articles/index.html à http://www.mysite/articles http://www.mysite/contact.html à http://www.mysite/contact http://www.mysite/foo/bar/index.html à http://www.mysite/foo/bar

MODIFIER : Voici mon fichier de configuration :

server {

    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;
    }

}

0 votes

Je crois que c'est quelque chose comme rewrite index.html -; et rewrite .html$ -; mais je n'utilise pas nginx, donc je ne suis pas sûr. Espérons que quelqu'un pourra venir et écrire une bonne réponse générique sur "Nginx Rewrite" afin que nous puissions avoir une cible proche. =]

0 votes

Le chemin final des directives "try_files" va créer une redirection interne vers le index.html que vous voulez rediriger. Autant que je sache, d'après ce que vous faites, le "chemin" final devrait être défini sur "=404" pour générer une erreur 404 si le fichier n'existe pas. Supprimez le premier bloc de 2 réécritures pour ne garder que les "permanent", puis changez "try_files" en : try_files $uri.html "${uri}index.html" =404;

1voto

knb Points 2521

La réponse acceptée ne semblait pas fonctionner pour moi. Je suis un utilisateur d'apache qui fait la transition, 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;

Cela fait arriver ceci :

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

J'espère que cela aidera d'autres utilisateurs d'apache 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 affichée au client) :

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

Alternativement, vous pouvez effectuer une redirection 301 (le client effectue une nouvelle demande) :

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

0 votes

Est-ce que cela devrait aller à l'intérieur d'une balise location / {} ?

1 votes

@Pardoner le contexte du module de réécriture est le serveur, l'emplacement et le if. Vous pouvez les placer dans n'importe lequel d'entre eux. Voir le manuel pour plus d'informations wiki.nginx.org/HttpRewriteModule#rewrite

0 votes

Je reçois une erreur 500 lorsque j'utilise ceux-ci :(

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