すべての .html 拡張子を書き換え、Nginx のインデックスを削除します。

すべての .html 拡張子を書き換え、Nginx のインデックスを削除します。

Nginx の URL 文字列からすべての .html 拡張子と index.html の出現をすべて削除するにはどうすればよいですか?

http://www.mysite/index.html〜へhttp://www.mysite http://www.mysite/articles/index.html〜へhttp://www.mysite/articles http://www.mysite/contact.htmlhttp://www.mysite/contact http://www.mysite/foo/bar/index.htmlhttp://www.mysite/foo/bar

編集:これが私の conf ファイルです:

サーバー{

    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;
    }

}

答え1

書き換えとして(クライアントに表示される URL を変更せずに、削除された URL をファイルシステム/バックエンドに渡します):

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

あるいは301 リダイレクト (クライアントが新しいリクエストを行う) を実行できます。

rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

答え2

受け入れられた回答は、私にはうまくいかなかったようです。私は Apache から切り替えようとしている人間なので、これはあらゆる状況で 100% うまくいくとは限りませんが、私のサイトではうまくいったようです (静的 HTML ページ、単なるテスト)。

index index.html;
error_page 404 404.html;
rewrite ^(/.+)\.html$ $1;
try_files $uri.html $uri/ =404;

それが次のことを実現させています:

  • url => アクセスしているファイル
  • domain.com/ => index.html
  • domain.com/somepage => somepage.html
  • domain.com/arandompage => 404.html

これが、混乱している他の元 Apache ユーザーにも役立つことを願っています。

関連情報