nginxでwww.example.jp/index.htmlをwww.example.jp/にリダイレクトしたい。
初めて質問させて頂きます。現在、centos7でnginx1.10.3を利用しています。
具体的には以下のようなファイル郡が有り、それらにアクセスされた場合、【リダイレクト後】に記載されているように、index.htmlが無い状態にリダイレクトしたいと思っています。(SEO的に統一した方が良いと聞いたので。)
①https://www.example.jp/index.html
②https://www.example.jp/res/index.html
③https://www.example.jp/anc/index.html
・・・・・・・・・・・・・・・・(10個程)
↓
①https://www.example.jp/
②https://www.example.jp/res/
③https://www.example.jp/anc/
・・・・・・・・・・・・・・・・(10個程)
そこで、自分なりに調べて、/etc/nginx/conf.d/example.confを作成し、リダイレクトするように記述してみました。
発生している問題・エラーメッセージ
①chromeで確認すると、https://www.example.jpにリダイレクトされた上で(urlの所がhttps://www.example.jp/index.htmlからhttps://www.example.jpに変更)、画面には、「www.example.jpページは機能していません。www.example.jpでリダイレクトが繰り返し行われました。」と表示されます。
②chromeで確認すると、https://www.example.jp/resにリダイレクトされた上で(urlの所がhttps://www.example.jp/res/index.htmlからhttps://www.example.jp/resに変更)、画面には、「www.example.jpページは機能していません。www.example.jpでリダイレクトが繰り返し行われました。」と表示されます。
※その他のディレクトリも同じ様にエラーとなります。
該当のソースコード
server {
listen 443 ssl default_server;
server_name www.example.jp;
ssl_certificate /etc/letsencrypt/live/example.jp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.jp/privkey.pem;
root /usr/share/nginx/html;
index index.html index.php;
ssi on;
error_page 404 /404.html;
location ~ (.*)/index.html {
return 301 https://www.example.jp$1;
}
location / {
#try_files $uri $uri/ /index.php?$query_string;
try_files $uri/ $uri /404.html;
}
#ssi用ファイル
location ~ include/(.*\.html) {
alias /usr/share/nginx/html/include/$1;
}
#.phpファイル
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
server {
listen 443 ssl;
server_name example.jp;
return 301 https://www.example.jp$request_uri;
}
server {
listen 80;
server_name www.example.jp;
return 301 https://www.example.jp$request_uri;
}
server {
listen 80;
server_name example.jp;
return 301 https://www.example.jp$request_uri;
}
試したこと
リダイレクトする為に追加したのは下記の部分です。
location ~ (.*)/index.html {
return 301 https://www.example.jp$1;
}
ここが間違ってるんだろうなあ。。とは思うのですが。。ちなみに、この3行を外すと、表示自体は正常になされます。
1度リダイレクトされたら、2度目は該当しないはず。。と思っているのですが、ループするという事は、ここが何度も引っ掛かっている?
すみません。nginxの知識以上に正規表現の知識も乏しくて。
ご面倒をおかけしますが、よろしくお願いいたします。
補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+3
rewrite
して break
フラグを付けるとどうでしょうか。
location / {
try_files $uri/ $uri /404.html;
rewrite ^(.*)/$ $1/index.html break;
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
indexディレクティブによる内部リダイレクトと、index.htmlが無い状態へのリダイレクトがループになっているのだと思われます。
1)
http://www.example.jp/index.html
が、
http://www.example.jp/
にリダイレクトされる
2)
「index index.html index.php;」というindexリダイレクトによって
http://www.example.jp/
が、
http://www.example.jp/index.html
に内部リダイレクトされる。
1)に戻る。
無限ループになるので「リダイレクトが繰り返し行われました」というエラーが表示されているのだと思います。
== 解決案 ==
index index.html index.php;
を
index index.php;
に変えれば、ループが切れます。
http://www.example.jp/index.html が http://www.example.jp/ にリダイレクトされて、実際に表示されるのは、http://www.example.jp/index.php の結果になります。
このような動作が、質問者が望んでいるものかどうかは判りませんけれども。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kunai
2017/03/03 17:55
何故コレが必要なのか聞かせていただけますか?リダイレクトでの実現以外に、要求を満たす方法は別にある気がします。
funchoic
2017/03/03 18:02
すみません。なんかしょーもない質問をしてしまったみたいで。。^^; 単純に、SEOの本を読んでいたら、「https://www.example.jp/と、https://www.example.jp/index.htmlと2つに別れていると、SEO的に評価が分散してしまうので301リダイレクトでどちらかに統一しましょう」と有ったので、チャレンジしてみた次第です。