質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

2回答

2425閲覧

nginx.confにてindex.phpを省略した状態でのリダイレクトができない

haroyan

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2021/07/23 14:39

編集2021/07/23 23:30

前提

・デフォルトのurlはhttp://XX.XX.XX.XX/pc/
・スマホから開いた際にhttp://XX.XX.XX.XX/pc/s/に遷移すること
・index.phpは省略された状態であること

詰まっている箇所

掲題の通りですが、nginx.confにてリダイレクト処理を追加しましたが、想定通りの処理がされずに困っています。

  • 想定と結果

想定:スマホから開いた際にhttp://XX.XX.XX.XX/pc/s/に遷移すること
結果:スマホから開いてもhttp://XX.XX.XX.XX/pc/のまま

nginx.confのリダイレクト処理内容

set $targetUri $request_uri; #遷移対象URL location /pc/ { if ($http_user_agent ~* "(iPhone|iPod|Android.*Mobile)"){ # スマホから開いた場合、遷移対象URLに/s/index.phpのurlを設定 set $targetUri http://XX.XX.XX.XX/pc/s/index.php; } # 遷移対象URLのファイル名がindex.phpの場合 if ($targetUri ~* "^(.*/)index.php$") { # return 301 $1; # http://XX.XX.XX.XX/pc/s/に遷移の想定だが遷移しない(index.phpは省略) rewrite ^(.*)/index.php$ $1/ permanent; }

上記に「return 301 $1;」の記載がありますが、これだと
http://XX.XX.XX.XX/pc/s/に遷移できるものの、「このページは動作していません」「XX.XX.XX.XXでリダイレクトが繰り返し行われました」と怒られてしまいます。(なのでコメントにしています)
ページが見つからないと
怒られてしまいます。(なのでコメントにしています)

いろいろといじってますが、全て失敗するので、そもそもリダイレクト自体できるのでしょうか?

本件で、お心当たりのある方、いらっしゃいましたら助言いただけると助かります。

補足情報(FW/ツールのバージョンなど)

以下環境にてHP運用をしています。

サーバOS:CentOS Stream8 x86_64
nginx:1.18.0
php:7.2.24

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ありがとうございました。
本件、解決できました。

location /pc/ { location /pc/s/ { #処理なし } if ($http_user_agent ~* "(iPhone|iPod|Android.*Mobile)"){ return http://XX.XX.XX.XX/pc/s/; } }

「XX.XX.XX.XXでリダイレクトが繰り返し行われました」という問題が起きていましたが、リダイレクト先の/pc/s/についての設定がなかったことが原因だったようです。
ですので、/pc/の中にさらにlocation /pc/s/を追加してあげることでリダイレクトループを避けることが出来ることが分かりました。

投稿2021/07/26 04:28

haroyan

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動いたものを貼っておきますね。

[root@pjlv-local s]# curl -L -A "iPhone" "http://127.0.0.1/pc/index.html" s [root@pjlv-local s]# curl -L -A "iPhone" "http://127.0.0.1/pc/s/index.html" s [root@pjlv-local s]# curl -L "http://127.0.0.1/pc/s/index.html" s [root@pjlv-local s]# curl -L "http://127.0.0.1/pc/index.html" pc
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 0; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; server_name 127.0.0.1; root /usr/share/nginx/html; set $sma 0; location ~ ^/pc/index.html { if ($http_user_agent ~* "(iPhone|iPod|Android.*Mobile)"){ set $sma 1; } if ($sma = 1) { rewrite ^(.*)$ http://127.0.0.1/pc/s/index.html permanent; } } } }

投稿2021/07/23 17:46

Noin

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haroyan

2021/07/23 23:32 編集

ありがとうございます! /s付きのurlに遷移することができました。 しかしながら、最終的に「index.php」の表示も省略する形にしたいです。 上記の状態からindex.phpを外したところ、「このページは動作していません」「リダイレクトが繰り返し行われました」が表示されてしまいます。 ※元々の質問に記載の「ページが見つからないと 怒られてしまいます」の記載も、見つからないのではなくリダイレクトが繰り返し行われていたことが原因だったようです。失礼しました(質問内容は修正済み) 何かお心当たりはありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問