reescriba todas las extensiones .html y elimine el índice en Nginx

reescriba todas las extensiones .html y elimine el índice en Nginx

¿Cómo eliminaría todas las extensiones .html, así como cualquier aparición de index.html de una cadena de URL en Nginx?

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

EDITAR:Aquí está mi archivo de configuración:

servidor {

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

}

Respuesta1

Como reescritura (pase la URL eliminada al sistema de archivos/backend sin cambiar la URL que se muestra al cliente):

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

Alternativamentepuedes hacer una redirección 301 (el cliente realiza una nueva solicitud):

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

Respuesta2

La respuesta aceptada no pareció funcionar para mí. Soy un tipo de Apache que está haciendo el cambio, por lo que es posible que esto no funcione al 100% en todas las circunstancias, pero pareció funcionar en mi sitio (páginas HTML estáticas, solo una prueba):

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

Eso está haciendo que esto suceda:

  • url => archivo al que está accediendo
  • dominio.com/ => index.html
  • dominio.com/alguna página => alguna página.html
  • dominio.com/arandompage => 404.html

Con suerte, esto ayudará a otros antiguos apaches confundidos.

información relacionada