
Wie entferne ich alle .html-Erweiterungen sowie alle Vorkommen von index.html aus einer URL-Zeichenfolge in Nginx?
http://www.mysite/index.html
bis bis bis http://www.mysite
http://www.mysite/articles/index.html
bishttp://www.mysite/articles
http://www.mysite/contact.html
http://www.mysite/contact
http://www.mysite/foo/bar/index.html
http://www.mysite/foo/bar
BEARBEITEN:Hier ist meine Conf-Datei:
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;
}
}
Antwort1
Als Neufassung (übergeben Sie die entfernte URL an das Dateisystem/Backend, ohne die dem Client angezeigte URL zu ändern):
rewrite ^(.*/)index\.html$ $1;
rewrite ^(/.+)\.html$ $1;
AlternativeSie können eine 301-Umleitung durchführen (Client stellt neue Anfrage):
rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;
Antwort2
Die akzeptierte Antwort schien bei mir nicht zu funktionieren. Ich bin ein Apache-Typ, der gerade wechselt, daher funktioniert dies möglicherweise nicht unter allen Umständen zu 100 %, aber dies schien auf meiner Site zu funktionieren (statische HTML-Seiten, nur ein Test):
index index.html;
error_page 404 404.html;
rewrite ^(/.+)\.html$ $1;
try_files $uri.html $uri/ =404;
So wird es möglich:
- URL => Datei, auf die zugegriffen wird
- domain.com/ => index.html
- domain.com/irgendeineseite => irgendeineseite.html
- domain.com/arandompage => 404.html
Hoffentlich hilft dies anderen verwirrten ehemaligen Apacheisten weiter.