みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

.htaccessの意味を教えてください。

制作会社が設定した、下記.htaccess の意味を教えて頂けないでしょうか?

RewriteEngine On

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /hotel/all/
RewriteCond %{REQUEST_URI} !/stay/hotel/all/
RewriteCond %{REQUEST_URI} !/sp/stay/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR]
RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ )
RewriteRule ^(.*)$ /sp/stay/all.html [R,L]
RewriteBase /

RewriteCond %{REQUEST_URI} /stay/hotel/all/
RewriteCond %{REQUEST_URI} !/sp/stay/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR]
RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ )
RewriteRule ^(.*)$ /sp/stay/all.html [R,L]
RewriteBase /

RewriteCond %{REQUEST_URI} /hotel/all/
RewriteCond %{REQUEST_URI} !/stay/hotel/all/
RewriteCond %{REQUEST_URI} !/stay/hotel/dream/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.+Mobile|Windows\ Phone)
RewriteCond %{HTTP_USER_AGENT} !(\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ )
RewriteRule ^(.*)$ /stay/hotel/all/index.php [R,L]
RewriteBase /

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR]
RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ )
RewriteRule ^(.*)$ sp/$1 [R,L]
RewriteBase /

RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.+Mobile|Windows\ Phone)
RewriteCond %{HTTP_USER_AGENT} !(\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ )
RewriteRule ^sp/(.*)$ $1 [R,L]
RewriteBase /
</IfModule>

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank)
RewriteRule ^$ /m/ [R,L]
</IfModule>

投稿日時 - 2015-09-07 23:09:17

QNo.9043909

困ってます

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

すみません、ずいぶん遅くなってしまいました。

> RewriteRule ^(.*)$ sp/$1 [R,L]
> の"^(.*)$ sp/$1"の ”$”と”$1”の意味が良くわかりません。

〔1〕 「^(.*)$」はURLを正規表現でマッチさせています。
「^」が最初「$」が終わりと考えてください。
「(.*)」は後で使うために「()」内の正規表現にマッチするものを変数に格納する感じです。
正規表現で「()」を使うとそのあとの置換などに使うために変数に格納します。
「$0」がマッチした全体で、後は「()」が出てくる順に「$1」「$2」...と格納されます。
※参考URLはサイト名はふざけてますが正規表現の勉強にはもってこいです。

〔2〕 「sp/$1」は〔1〕で取得した変数と合わせてあたらしいURLを作っています
「$1」が変数です

〔3〕「[R,L]」はオプションです
Lはこれでこの条件での判別は最後ということ
Rは302レスポンスを返してリダイレクトします。

なのでこのRewriteRule では
aaa/bbb/cccの場合、
「(.*)」に「aaa/bbb/ccc」がマッチし$1=「aaa/bbb/ccc」になり
「sp/$1」の「$1」に代入するので
「sp/aaa/bbb/ccc」なったURLにリダイレクトということです。

要はスマホがPC用のURLにディレクトリの方にリダイレクトするということのようです。

「RewriteCond %{REQUEST_URI} !/sp/」で始まっている部分は
スマホがPC用のURLに来た場合で、
「RewriteCond %{REQUEST_URI} /sp/」で始まっている部分は
PCがスマホ用のURLに来た場合にそれぞれ後ろに続くURLで転送するように書きたかったんのだと思います。

参考URL:http://www.mnet.ne.jp/~nakama/

投稿日時 - 2015-09-30 02:39:33

お礼

Hanagefactory様
回答有難うございます。
また、詳しくお教え頂きありがとうございます。
なんとなく理解できましたので、アレンジして転送設定を試したいと思います。
有難うございました。

投稿日時 - 2015-09-30 15:11:17

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

すでに回答がされていますが、mod_rewriteという
webシステムから見えるURLを書き換えるツールを使っています

ルートのURL(例:http://hogehoge.com/)のURLにスマホやガラケーからのアクセスがあった場合
スマホであれば「http://hogehoge.com/sp/」のURLと同じ内容を表示して
ガラケーであれば「http://hogehoge.com/m/」のURLと同じ内容を表示する
などの用途で使っています

RewriteCondで該当する条件(スマホやガラケーの判別)をしていて
該当するならRewriteRuleの中の記述で書き換えを行う、という感じですね

投稿日時 - 2015-09-08 11:23:08

お礼

m_matsubara様
回答有難うございます。

投稿日時 - 2015-09-11 19:11:21

簡単に言えばスマホとかガラケーだったら違う表示をさせるように、
設定が書いてあります。
具体的にはmod_rewriteというWebサーバー(apache)のモジュールを利用した、
リクエストURLとユーザーエージェントによって、
どの内部のリソースを表示させるかを振り分けています。

例えばリクエストに/hotel/all/が含まれ/stay/hotel/all/や/sp/stay/がなければ、
iphoneやandroidと、特定の端末の場合は、
/sp/stay/all.htmlの内容を表示するみたいな感じですかね。
もちょい上手く書けるとは思いますが。

後は下記などを参考に読んでみては?
http://oxynotes.com/?p=7392

投稿日時 - 2015-09-07 23:45:20

お礼

Hanagefactory様
詳しくお教え頂きありがとうございます。
あわせて、参考HPをお教え頂きありがとうございます。

すいません、お教え頂いたHPを拝見しましたが、下記点が理解できませんでした、ご都合の良い時で結構ですのでお教え頂けましたら幸いです。

RewriteRule ^(.*)$ sp/$1 [R,L]
の"^(.*)$ sp/$1"の ”$”と”$1”の意味が良くわかりません。
多分ファイル名の事だとは思うのですが、拡張子をhtmlからphpへ変更する場合はどうしたらよいのでしょうか?

投稿日時 - 2015-09-12 09:29:33

あなたにオススメの質問