プロが教える店舗&オフィスのセキュリティ対策術

パソコンと携帯の振り分けは、htaccessでエージェントにより振り分けが一般的だと思います。
「RewriteEngine on」で振り分けの場合について。
http://www.hogehoge.com/
http://www.hogehoge.com/mobile/
トップディレクトリにhtaccessを設置した場合、携帯サイトが入っている「mobile」ディレクトリには、「RewriteEngine Off」を記述したhtaccessを設置する必要があります。
普通であれば、これで問題なくパソコンと携帯を振り分ける事ができるのですが、携帯サイトが入っている「mobile」ディレクトリには、動的アドレスを静的に変更するために、htaccessに「RewriteEngine on」が記述されています。

よって、パソコンと携帯の振り分けを無効にするために「RewriteEngine Off」をしなければならないのに、動的アドレスを静的にアドレスにするために、「RewriteEngine on」も記述しなければなりません。

パソコンと携帯の振り分けと、動的を静的にする変換を行うような良い記述方法はあるでしょうか?

ちなみに、パソコントップページはすでに検索エンジンに登録されているため、振り分け用のindex.cgiなどは使用したくないと思っています。

アドバイスをお願い致します。

A 回答 (5件)

出勤前なのでちょっとだけ、、


もしhttpd.confもいじれるのなら
RewriteLog logs/rew_log
RewriteLogLevel 3
を追記すると そのあたりの処理も記録されます
http://www.net-newbie.com/trans/mod_rewrite.html …
    • good
    • 0

#3の訂正 携帯/PC振り分けの RewriteRule部分


RewriteRule ^.*$ /mobile/ [R]
# ↑上の条件 :(!^/mobile) and (携帯電話) の場合に適用
# ここだけはリダイレクトさせないと、その先へ行くときにまずいですね ^.*$ http://hoge.example.com/mobile/ でもいいです

もっと下の
RewriteCond %{REQUEST_URI} ^/mobile <=この行は 有っても良いですが不要ですね
RewriteRule ^mobile/([0-9a-zA-Z_\-]+)
とRewriteRuleで指定してあるので

この回答への補足

ご回答ありがとうございます。

う~ん、上手く行かないです。
パソコン用のアドレスは動的から静的に変換されます。
ですが、パソコンと携帯の振り分けがなぜかうまく動作しません。

(!^/mobile) and(RewriteRuleにマッチ)の場合の
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
上記は、下記の間違いでしょうか?
RewriteRule ^([0-9a-zA-Z_\-]+)/review/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
パソコン用のURLの書き換えは、少し試したところ問題はなかったから、このままで良いのかな(ー_ー;

記述には特に問題はない気がするのですが、なぜパソコンと携帯で上手く振り分けができないのか分かりません。
あと、直接携帯の静的アドレスにアクセスした場合、404エラーで上手くアクセスできません。
例:http://www.hogehoge.com//mobile/shop/index.cgi?t …

http://www.hogehoge.com/mobile/book/1001.html

少し凝った事をしようとすると、いろいろと難しいですね。
お手数をおかけしますが、アドバイスをお願い致します。


###############################
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^([0-9a-zA-Z_\-]+)/review/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
# ↑上の条件:(!-f )and (!^/mobile) and(RewriteRuleにマッチ)の場合に適用

RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
# ↑上の条件: (!^/mobile) and(RewriteRuleにマッチ)の場合に適用

RewriteCond %{REQUEST_URI} !^/mobile
#PCと携帯の振り分け
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^vodafone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^softbank [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^UP.Browser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WILLCOM [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ASTEL [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET [NC]
RewriteRule ^.*$ /mobile/ [R]
# ↑上の条件 :(!^/mobile) and (携帯電話) の場合に適用

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^mobile/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /mobile/shop/index.cgi?type=$1&mode=goods&id=$2 [L]

# ↑上の条件 : ( !-f ) and ( mobile/以下のディレクトリ ) and ( RewriteRuleにマッチ )の時に適用
###############################

補足日時:2008/06/12 21:20
    • good
    • 0

うちのサーバー(Fedora5 Linux+Apache2.2.2)では以下で出来たみたいです


/home/tarou/www/.htaccess に
mobileディレクトリ用 .htaccessの記述も統合しました
 (単に個人的に 私にはその方が判り易いってことです)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^([0-9a-zA-Z_\-]+)/review/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
# ↑上の条件:(!-f )and (!^/mobile) and(RewriteRuleにマッチ)の場合に適用

RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?type=$1&mode=goods&id=$2 [L]
# ↑上の条件: (!^/mobile) and(RewriteRuleにマッチ)の場合に適用

RewriteCond %{REQUEST_URI} !^/mobile
#PCと携帯の振り分け
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
~中略~
RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET [NC]
RewriteRule ^.*$ /mobile/
# ↑上の条件 :(!^/mobile) and (携帯電話) の場合に適用

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/mobile
RewriteRule ^mobile/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /mobile/shop/index.cgi?type=$1&mode=goods&id=$2 [L]
# ↑上の条件 : ( !-f ) and ( mobile/以下のディレクトリ ) and ( RewriteRuleにマッチ )の時に適用
###############以上です###########

解説:
RewriteCond 条件1  # <=andになる
RewriteCond 条件2  #
RewriteRule ^/index\.htm$ /yes.htm # 条件1、条件2、RewriteRule の3つが一致した時に実行される
RewriteRule ^/index\.htm$ /no.htm # 条件1、2のどちらかでも一致していないがRewriteRule には合う場合に実行される

http://www.nurs.or.jp/~sug/homep/rewrite/rewrite … <=RewriteCond の項目をお読みください

それから
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ http://hoge.example.com/shop/cgi/index.cgi.cgi?t …以下略
とhttp:// から始まるフルURLで書いた場合 同じサーバー内でもリダイレクトするはずなので
http://hoge.example.com/shop/cgi/index.cgi.cgi?t … に対して
http://hoge.example.com/1/2/3.html と言うリンクでアクセスすることは出来ますが
ブラウザのURL欄には 動的アドレスが表示されてしまうと思います
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ /shop/index.cgi?t=$1 以下略
だとブラウザのURL欄も
http://hoge.example.com/1/2/3.html のままだと思います
 (と言うか私の環境ではそうなりました)
    • good
    • 0

>mobileディレクトリ以下の全てのディレクトリも自動的に適応外になるのでしょうか。


そうだと思います。 としか私には答えられませんが
サブディレクトリでの変換後も
REQUEST_URI は /mobile から始まりますか?

http://hoge.example.com/mobile/01.htm ならいいはずですが
http://hoge.example.com/0/mobile01.htm に変換されるとtopディレクトリの指定で
http://hoge.example.com/mobile/ に再変換されると思います。
その辺りの話は
http://www.nurs.or.jp/~sug/homep/rewrite/rewrite … に書いてあるようです

それでも駄目なら 宜しければ補足に
topディレクトリのと mobileディレクトリ の2つの.htaccess の内容を貼り付けてみてください
(固有名詞が含まれる場合は 伏字か hoge などで)

この回答への補足

ご回答ありがとうございます。

◆トップディレクトリのhtaccess
AddType text/x-server-parsed-html .html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^([0-9a-zA-Z_\-]+)/review/([0-9a-zA-Z_\-]+).html$ http://www.hogehoge.com/shop/cgi/index.cgi.cgi?t … [L]
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ http://www.hogehoge.com/shop/cgi/index.cgi.cgi?t … [L]

#PCと携帯の振り分け
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^vodafone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^softbank [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^UP.Browser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WILLCOM [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ASTEL [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET [NC]
RewriteRule ^.*$ http://www.hogehoge.com/mobile/ [L]

◆mobileディレクトリのhtaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9a-zA-Z_\-]+)/([0-9a-zA-Z_\-]+).html$ http://www.hogehoge.com/mobile/shop/index.cgi?ty … [L]

携帯は下記のように動的から静的に変換されます。
http://www.hogehoge.com/mobile/shop/index.cgi?ty …

http://www.hogehoge.com/mobile/book/1001.html

自分でもいろいろと調べているのですが、解決策が見つかりません。
お手数をおかけして申し訳ありませんが、アドバイスを頂けると嬉しく思います。

よろしくお願い致します。

補足日時:2008/06/11 14:43
    • good
    • 0

RewriteEngine Off にする意味は ループを避けるためでしょうか?



RewriteCondは複数行書くと(明示的にorを指定しない限り)and条件になることはご存知ですよね?

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/mobile
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
中略(他の携帯指定)

RewriteRule 以下略

とすれば/mobile に RewriteEngine Off を書かなくてもすむのでは?
勘違いしてたらゴメンなさいです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

振り分けについてですが、「RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]」のようにORを指定しております。
あと、「RewriteCond %{REQUEST_URI} !^/mobile」を付け加えてみました。
この記述は、「mobile」ディレクトリは適応外にすると言う意味ですよね?

トップページにアクセスしたら、携帯サイトのトップを表示させる事ができました。(http://www.hogehoge.com/mobile/
ですが、携帯サイトのトップページのリンクをクリックしても、携帯サイトのトップページしか表示されません。
「RewriteCond %{REQUEST_URI} !^/mobile」は、mobileディレクトリ以下の全てのディレクトリも自動的に適応外になるのでしょうか。

何とも手詰まりな状態です。
自分でももう少し調べてみようと思いますが、引き続きアドバイスをお願い致します。

お礼日時:2008/06/10 03:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!