
¿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.html
a 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
ahttp://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.