2017-12-31 117 views
1

Ich möchte ".html" zu jedem Dokument hinzufügen, das auf "/" endet, außer von der Homepage.nginx redirect:/*/to /*.html (hinzufügen .html zu url)

Ich habe verschiedene Möglichkeiten ausprobiert, indem ich rewrite und 301 mit nginx zurückgebe, aber ich habe es nicht funktioniert. angehängt die letzte Version, die ich tat, die tut /*/.html aber die zweite/sollte nicht da sein.

location/{ 
    try_files $uri $uri/ =404; 
    return 301 $scheme://$host$request_uri.html; 
} 

Lösung im Online Suche:

root: domain.com sollte als www.domain.com

Dateien sollten (301) umgeleitet werden geliefert werden, um die * .html Version

  • domain.com/abc/ domain.com/abc.html
  • domain.com/dir1/abc/ domain.com/dir 1/abc.html

Antwort

1

Sie müssen einen regulären Ausdruck verwenden, um den Teil des URI vor die Hinter /, zu erfassen, um sie zu beseitigen. Eine Lösung wäre, einen benannten Ort mit der try_files Anweisung zu verwenden.

Zum Beispiel:

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite ^(.+)/$ $1.html permanent; 
} 

Siehe this document für mehr.

+0

Ich würde eine ähnliche Frage stellen, aber dann das gefunden. Wenn jemand nach dem Umschreiben von Links sucht, die nicht den ".html" -Teil am Ende der URL haben, können Sie dies verwenden, entfernen Sie einfach '/' aus dem Neuschreiben. so: 'rewrite^(. +) $ $ 1.html permanent;' Wenn jemand versucht, zu example.com/contact zu wechseln, wird er statt 404 zu example.com/html gelangen. – ZN13

+0

@ ZN13 Anhängen '.html 'kann direkt mit' try_files' behandelt werden, zum Beispiel: 'try_files $ uri $ uri.html $ uri/= 404;'. Siehe den Link in meiner Antwort für Details. –