###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/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー