
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.html
〜http://www.mysite/contact
http://www.mysite/foo/bar/index.html
へhttp://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 ユーザーにも役立つことを願っています。