2020/02/28

一つのphpで処理するページで、.htaccessでスマホページに切り替えを入れようと思ってループにハマった話。

.htaccess の書き方がなんとなくしかわからない時
ネットで検索して、例文をコピペしてくるんですが、
今回は、「https://hogehoge.jp/」にアクセスしたとして
スマホでアクセスしたら
「https://hogehoge.jp/sp/」にアクセス出来るようにしたかったのです。

ですが、これをやる前に、
「https://hogehoge.jp/submenu/」にアクセスした場合
「https://hogehoge.jp/index.php?path=/submenu/」
として、一つのphpで、処理したかったので
----------------------
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
----------------------

という内容にしていたのでした。

さらに、最後がファイル名じゃなかった時に
必ずスラッシュを入れたかったので

----------------------
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
----------------------

こんな事になっており・・・。


スマホページでのリダイレクト方法としてよくでてくる

----------------------
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.*Mobile|Windows.*Phone)
RewriteRule ^(.*)$ sp/$1 [L,R=301]
----------------------

を追加したところ

末尾に、無限ループで sp/sp/sp/sp/sp/.......

結果、「ERR_TOO_MANY_REDIRECTS」となってしまうという悲しみ

ここで、やっと、ちゃんと.htaccessの記述内容を調べることを思い立つわけです。

結論からいえば、

----------------------
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{REQUEST_URI} !/index.php
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.*Mobile|Windows.*Phone)
RewriteRule ^(.*)$ sp/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
----------------------

とすれば良かったというあれなんです


RewriteCond %{REQUEST_URI} !/index.php


この一行の大事だったこと・・・。


ループの原因は、まず、
「https://hogehoge.jp/sp/」にアクセスした場合
「https://hogehoge.jp/index.php?path=/sp/」
にリダイレクトされます。

しかし、スマホの場合
「https://hogehoge.jp/index.php?path=/sp/」
でアクセスされると
「https://hogehoge.jp/sp/index.php?path=/sp/」
にリダイレクトされます。

でも、index.phpで処理をしたいので
「https://hogehoge.jp/index.php?path=/sp/sp/」
にリダイレクトしますwwww

はい。
無限ループの完成wwwwwwwwwww

なので、スマホのページの処理で
index.phpで処理する場合はリダイレクトしないようにするために
----------------------
RewriteCond %{REQUEST_URI} !/index.php
----------------------
を追加したということです。

あーややこしや。

そんな感じでしたww

0 件のコメント:

コメントを投稿