• ベストアンサー

htaccessリダイレクトの書き方

htaccessの書き方をおしえてください。 SSL証明書を取得したので、http→httpsへのリダイレクトに加えて、 PC向けのHPとスマートフォン向けのHPへのリダイレクトをしたいのです。 それぞれ個々の設定に関するサンプルはあるのですが、複合してあわせるとうまく動かなくて、質問させていただきました。 よろしくおねがいいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6809/9681)
回答No.4

>たしかに、トップページだけではないので、ドメイン以下すべてにリダイレクトさせたいのです。 それならば、スマホ判定となった時に フォルダ・パス部分の手前に /sp/を付ける、と言うリダイレクトにしてみましょう。 さらに、既に /sp/がついていた場合は除外します。(じゃないと /sp/sp/sp/…と増えまくるので) ---- .htaccess ---- RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteCond %{QUERY_STRING} !mode=pc RewriteCond %{REQUEST_URI} !^\/sp\/ RewriteRule ^(.*)$ /sp/$1 [R,L] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] ---- ここまで ---- これで、スマホアクセス時には必ず /sp/の下に飛ばされることになります。 ただしこうしたからには、ルートフォルダ以下と /sp/フォルダ以下に、必ず同じファイル名を用意しないといけません。 またその内容も、表示以外は一致させるようにしないと困るでしょう。 メンテには結構手間がかかることになります。 そこで最近では、cssによる「レスポンシブデザイン」で、ページを作る方が多いと思います。 >CSSでスマホ対応!レスポンシブサイトの作り方と初心者向けQ&A >https://www.sejuku.net/blog/99964 デバイスの「幅」により、cssを切り替えて「見え方」を変える方法です。 こちらだと、違うフォルダにある同名ファイルの内容を同一に保つ、という手間は無くなります。 なんせPCもスマホも同じHTMLファイルにアクセスしますから。 スマホアクセスを/sp/フォルダに飛ばす、というリダイレクトも、不要になります。

hide_momiji
質問者

お礼

ありがとうございます。 丁寧なご回答に感謝します。 おかげさまで思い通りうごきました。 BAとさせていただきました。

その他の回答 (3)

  • asciiz
  • ベストアンサー率70% (6809/9681)
回答No.3

mod_rewrite を使ってるとのことだったので、単純にmod_rewrite用のリダイレクト記述を追加して、動いたような感じです。 <IfModule> は、入ってなければどうせ動かないんだし、と省略しちゃいましたが。 あっても良いとは思います。 ---- .htaccess ---- RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteCond %{QUERY_STRING} !mode=pc RewriteRule ^$ /sp/ [R,L] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] ---- ここまで ---- ところで、上記ルールを見て気になった点が。 スマホ向けに飛ばすのはトップページのみ、でいいんでしょうか? 例えば(スマホでのアクセス時) http://ドメイン.jp/ は https://ドメイン.jp/sp/ に飛ぶわけですが、 http://ドメイン.jp/index.html は https://ドメイン.jp/index.html とhttpsリダイレクトされるのみでスマホ用ページには飛びません。 https://ドメイン.jp/sp/index.html に飛んだ方が良かったりしますか? あるいはindex以外のも飛んだ方が良いですか? https://ドメイン.jp/test.html へのスマホアクセスで https://ドメイン.jp/sp/test.html へリダイレクトされるなど。

hide_momiji
質問者

補足

ありがとうございます。 >http://ドメイン.jp/index.html は > https://ドメイン.jp/index.html と >httpsリダイレクトされるのみでスマホ用ページには飛びません。 >https://ドメイン.jp/sp/index.html に飛んだ方が良かったりしますか? >あるいはindex以外のも飛んだ方が良いですか? >https://ドメイン.jp/test.html へのスマホアクセスで >https://ドメイン.jp/sp/test.html へリダイレクトされるなど。 たしかに、トップページだけではないので、ドメイン以下すべてにリダイレクトさせたいのです。

  • asciiz
  • ベストアンサー率70% (6809/9681)
回答No.2

あ、あと、http→https リダイレクトは、レンタルサーバの管理コンソールから、「常時https設定」みたいなのを有効にするだけで可能な場合もあります。 それができるなら、htaccessで考えるのはPC/スマホの振り分けだけでよくなったりします。 そしたら、振り分け機能のみを実装すれば良いので、参考ページのサンプルもそのまま適用出来るかもしれません。

hide_momiji
質問者

補足

ありがとうございます。 ロリポップサーバをつかっています。 上位プランなら管理画面から設定できるのかもしれませんが、 現状チカッパプランで「https設定」を有効無効にする機能はないようにおもえます。

  • asciiz
  • ベストアンサー率70% (6809/9681)
回答No.1

htaccessによるリダイレクトと一口に言っても、Redirect、RedirectMatch、mod_rewrite(RewriteEngine)によるものなどいろいろあるので、うまくいかなかったhtaccessを載せてどのようなことがしたかったのか書いた方が良いと思います。 まあドメイン名やフォルダ名は仮のものに置き換えて。 あと単にスマホ向けページにしたいと言っても、違うドメインに飛ばす方法、違うフォルダに振り分ける方法、表示ファイルを変える方法、パラメータを変える方法、など、やはりいろいろあります。 どのようにしたいと考えていたのでしょうか。

hide_momiji
質問者

補足

ありがとうございます。 現在はスマートフォンとPC画面の切り替えをしています。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteCond %{QUERY_STRING} !mode=pc RewriteRule ^$ /sp/ [R,L] </IfModule> これに、http://→https://へのリダイレクトを追加したいのです。 説明がたらずに申し訳ありません。

関連するQ&A