Hướng dẫn nginx remove index html from url - nginx xóa chỉ mục html khỏi url

Tôi đã thấy một vài cách để viết lại

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
2 và thêm
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
3 vào nó khi tệp cụ thể đó tồn tại trong hệ thống tệp, như vậy:

if (-f $request_filename/index.html) {
    rewrite (.*) $1/index.html break;
}

Nhưng tôi đã tự hỏi nếu điều ngược lại có thể đạt được không:

tức là khi ai đó yêu cầu

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
4, họ được chuyển hướng đến
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
5

Bởi vì nginx regexp tương thích với perl, tôi đã thử một cái gì đó như sau:

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}

Nhưng nó chủ yếu là một phỏng đoán, có tài liệu tốt nào mô tả modrewrite cho nginx không?

Hướng dẫn nginx remove index html from url - nginx xóa chỉ mục html khỏi url

Arpit

6.4357 Huy hiệu vàng36 Huy hiệu bạc68 Huy hiệu Đồng7 gold badges36 silver badges68 bronze badges

Hỏi ngày 15 tháng 4 năm 2011 lúc 11:04Apr 15, 2011 at 11:04

Cấu hình sau đây cho phép tôi chuyển hướng

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
6 sang
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
7 và
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
8 sang
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
9:

# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}

Đã trả lời ngày 17 tháng 9 năm 2016 lúc 6:37Sep 17, 2016 at 6:37

Hướng dẫn nginx remove index html from url - nginx xóa chỉ mục html khỏi url

JacksonjacksonJackson

8.8405 Huy hiệu vàng 50 Huy hiệu bạc72 Huy hiệu Đồng5 gold badges50 silver badges72 bronze badges

Tôi sử dụng bản viết lại sau trong mệnh đề máy chủ cấp cao nhất:

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

Sử dụng điều này một mình hoạt động cho hầu hết các URL, như

# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
0, nhưng nó phá vỡ
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
4. Để giải quyết điều này, tôi có quy tắc bổ sung sau:

location = /index.html {
  rewrite  ^ / permanent;
  try_files /index.html =404;
}

Phần

# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
2 trả về lỗi 404 khi không tìm thấy tệp.

Tôi không biết tại sao lần viết lại đầu tiên không đủ.

Đã trả lời ngày 23 tháng 4 năm 2011 lúc 14:48Apr 23, 2011 at 14:48

Nicolas Wunicolas WuNicolas Wu

4.6352 Huy hiệu vàng24 Huy hiệu bạc32 Huy hiệu Đồng2 gold badges24 silver badges32 bronze badges

1

Vì một số lý do, hầu hết các giải pháp được đề cập ở đây không hoạt động. Những người làm việc đã cho tôi lỗi bị thiếu / trong URL. Giải pháp này làm việc cho tôi.

Dán vào chỉ thị vị trí của bạn.

if ( $request_uri ~ "/index.html" ) {
  rewrite ^/(.*)/ /$1 permanent;
}

Đã trả lời ngày 4 tháng 6 năm 2013 lúc 10:35Jun 4, 2013 at 10:35

HendrikhendrikHendrik

4.7116 Huy hiệu vàng45 Huy hiệu bạc 50 Huy hiệu Đồng6 gold badges45 silver badges50 bronze badges

0

Cái này hoạt động:

# redirect dumb search engines
location /index.html {
    if ($request_uri = /index.html) {
        rewrite ^ $scheme://$host? permanent;
    }
}

Đã trả lời ngày 8 tháng 8 năm 2012 lúc 17:21Aug 8, 2012 at 17:21

Hướng dẫn nginx remove index html from url - nginx xóa chỉ mục html khỏi url

Mguttmguttmgutt

5.5672 Huy hiệu vàng49 Huy hiệu bạc75 Huy hiệu Đồng2 gold badges49 silver badges75 bronze badges

0

Đối với gốc

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
6, câu trả lời từ Nicolas dẫn đến một vòng lặp chuyển hướng, vì vậy tôi phải tìm kiếm các câu trả lời khác.

Câu hỏi này đã được hỏi trên các diễn đàn Nginx và câu trả lời ở đó hoạt động tốt hơn. http://forum.nginx.org/read.php?2.217899,217915

Sử dụng

location = / {
  try_files /index.html =404;
}

location = /index.html {
  internal;
  error_page 404 =301 $scheme://domain.com/;
}

hoặc

location = / {
  index index.html;
}

location = /index.html {
  internal;
  error_page 404 =301 $scheme://domain.com/;
}

Đã trả lời ngày 16 tháng 7 năm 2012 lúc 13:33Jul 16, 2012 at 13:33

EvgenyevgenyEvgeny

6.1334 Huy hiệu vàng56 Huy hiệu bạc63 Huy hiệu Đồng4 gold badges56 silver badges63 bronze badges

Điều này đang làm việc cho tôi:

rewrite ^(|/(.*))/index\.html$ /$2 permanent;

Nó bao gồm cả phiên bản gốc

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
6 và các trường hợp thấp hơn
# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
5

Phần đầu tiên của regex về cơ bản dịch là:

# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
6 hoặc
# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
7 - ​​Trong trường hợp đầu tiên $ 2 là một chuỗi trống để bạn chuyển hướng đến
if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
7, trong trường hợp thứ hai $ 2 là
# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
9 vì vậy bạn chuyển hướng đến
# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
    rewrite ^(.*)/ $1/ permanent;
}
7

Tôi thực sự đã đi một chút fancier để che

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
0

Đã trả lời ngày 18 tháng 4 năm 2017 lúc 16:10Apr 18, 2017 at 16:10

Barrypbarrypbarryp

Phù hiệu đồng 12633 bronze badges

2

Các giải pháp trích dẫn

rewrite ^(.*)/index\.html$ $1 permanent;
4 Giả sử rằng miền được mã hóa cứng. Nó không phải trong trường hợp của tôi và vì vậy tôi đã sử dụng:

if ( $request_uri ~* "index\.html$" ) {
    set $new_uri $request_uri ~* s/index\.html//
    rewrite $1 permanent;
}
1

Đã trả lời ngày 24 tháng 6 năm 2013 lúc 23:48Jun 24, 2013 at 23:48

2