Moje pliki na dysku mają rozszerzenia: index.html
, a.html
. Chcę, aby żądanie dla http://example.com/a
załadować /var/www/a.html
i http://example.com/
załadować /var/www/index.html
. Chcę, aby każdy inny adres URL przekierowywał do kanonicznego adresu URL, więc http://example.com/a.html
powinien przekierować na numer http://example.com/a
.przekierowanie /foo.html do/foo ale nie/do/indeksu w nginx
Moja konfiguracja wygląda następująco:
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;
location/{
root /var/www;
try_files $uri.html $uri $uri/ =404;
}
ten sposób przekierować /a.html
do /a
i odnieść sukces przy załadunku a.html
z dysku:
$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
Location: http://www.jefftk.com/food
$ curl -s http://www.jefftk.com/food | grep ^Location
Ale wysyła /
do /index
:
$ curl -s -D- http://www.jefftk.com/pictures/ | grep ^Location
Location: http://www.jefftk.com/pictures/index
$ curl -s -D- http://www.jefftk.com | grep ^Location
Location: http://www.jefftk.com/index
Jeśli usunąć regułę przepisywania przestaje przekierowanie z /a.html
do /a
ale również przestanie wysyłać /
do /index
:
$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
$ curl -D- -s http://www.jefftk.com/food | grep ^Location
$ curl -D- -s http://www.jefftk.com/ | grep ^Location
$ curl -D- -s http://www.jefftk.com/pictures/ | grep ^Location
Dlaczego tak się stało? Czy mogę nginx do obu rzeczy, które chcę (nie .html
rozszerzenie, no index
w url) w tym samym czasie?
To jednak nie przekieruje 'http: // example.com/file.html' do' http: // example.com/file'. –
Niestety, nie do końca zrozumiałem twoje pytanie, ale przeczytałem je ponownie i przetestowałem nowe zasady. Skorygowałem powyższy kod, aby uwzględnić dodatkowe lokalizacje. – kchan
To też nie działa: podczas/nie przekierowuje do/index,/foo nadal przekierowuje do/foo/index –