島根県安来市のフリーランスエンジニア_プログラマー画像1
Nginxで/index.htmlを/にリダイレクトする方法【無限ループ解決】 – Eatransform

Nginxで/index.htmlを/にリダイレクトする方法【無限ループ解決】

Nginxで/index.htmlを/にリダイレクトする正しい方法

無限ループ地獄から脱出するまでの完全ガイド

⚠️ よくあるトラブル

「このページは動作していません。リダイレクトが繰り返し行われました」というエラーに悩まされていませんか?この記事で解決します。

結論

server {
    listen 80;
    server_name example.com www.example.com;
    
    root /var/www/html;  # 重要:これがないとダメ
    
    location = /index.html {
        return 301 /;
    }
    
    location = / {
        try_files /index.html =404;
    }
    
    location / {
        try_files $uri $uri/ =404;
    }
}

なぜ無限ループが起きるのか

間違った設定例

location = /index.html {
    return 301 /;
}

location / {
    root /var/www/html;
    try_files $uri $uri/ =404;
}

無限ループの流れ:

  1. / にアクセス
  2. Nginxが自動的に index.html を探す(デフォルト動作)
  3. /index.html として処理される
  4. location = /index.html にマッチして / にリダイレクト
  5. ①に戻る → 無限ループ

正しい設定

location = /index.html {
    return 301 /;
}

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

location / {
    try_files $uri $uri/ =404;
}

ポイント:

  • location = / で完全一致を明示的に指定
  • try_files /index.html で直接ファイルを指定
  • Nginxの自動 index 検索を回避

ハマりやすいミス3選

1. root ディレクティブの指定忘れ

これがないと「welcome to nginx」のデフォルトページが表示されます。必ず root /var/www/html; をサーバーブロックに追加してください。

2. location /location = / の違い

location / は前方一致、location = / は完全一致。リダイレクトには完全一致が必須です。

3. index ディレクティブの自動動作

Nginxはデフォルトで / へのアクセス時に自動的に index.html を探します。これを location = / で上書きする必要があります。

実装手順

Step 1: 設定ファイルを編集

sudo nano /etc/nginx/sites-available/your-site

Step 2: 以下の設定を記述

server {
    listen 80;
    server_name example.com www.example.com;
    
    root /var/www/html;
    
    location = /index.html {
        return 301 /;
    }
    
    location = / {
        try_files /index.html =404;
    }
    
    location / {
        try_files $uri $uri/ =404;
    }
}

Step 3: 設定をテスト

sudo nginx -t

Step 4: Nginxを再起動

sudo systemctl reload nginx

動作確認方法

  1. ブラウザで http://example.com/ にアクセス → サイトが正常に表示されればOK
  2. ブラウザで http://example.com/index.html にアクセス → http://example.com/ にリダイレクトされればOK
  3. 開発者ツール(F12)のNetworkタブで確認 → 301リダイレクトが表示されればOK

SEO的な補足

301リダイレクトは「恒久的な移転」を意味し、SEO評価を引き継ぎます。

さらに、HTMLの <head> 内に canonical タグを追加すると完璧です:

<link rel=”canonical” href=”http://example.com/” />

トラブルシューティング

「welcome to nginx」が表示される

原因:デフォルト設定が優先されている、または root が指定されていない

解決方法:

sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
「nginx: [emerg] 」エラーが出る

原因:設定ファイルの構文エラー(閉じカッコ忘れなど)

解決方法:

sudo nginx -t

でエラー箇所を確認し、各 location ブロックの } が正しく閉じられているか確認してください。

それでもリダイレクトループする

確認ポイント:

  • location = / が正しく記述されているか
  • try_files /index.html =404; になっているか($uri ではない)
  • 他の設定ファイルと競合していないか
  • ブラウザのキャッシュをクリアしたか

まとめ

  • root ディレクティブは必須
  • location = / で完全一致を明示
  • try_files /index.html で直接指定
  • 設定後は必ず nginx -t でテスト

この設定で、SEO的にも正しい301リダイレクトが実現できます。

ConoHa VPS「25秒で起動」は本当?実際に1時間以上かかった体験談

【JavaScript】alert()後のfocus()が動かない原因と解決法 | setTimeout活用術