2012年09月25日

iモードブラウザ1.0からのアクセスを別のページにリダイレクトするための.htaccessの記述 その2

7月7日の記事で、.htaccess を使って iモードブラウザ1.0 の機種から外部cssを使用したページ http://xxxxxx/mobile/ にアクセスしてきた場合、インラインcssを使用した http://xxxxxx/mobile/i/ にリダイレクトする方法について記述しました。
この方式の問題点は、個別のページ たとえば http://xxxxxx/mobile/index.html や /mobile/news.html にアクセスした場合にはこの振り分けが効かないところです。
この件についてしばらく放置してたんですが、先日、どうにかうまくいく方法を見つけましたので、書き留めておきます。

結論から書くと、/mobile/ ディレクトリに置く.htaccessファイルは以下のように書きます。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*$ [NC]
RewriteCond %{HTTP_USER_AGENT} DoCoMo/1.0 [OR]
RewriteCond %{HTTP_USER_AGENT} DoCoMo/2.0.*c100|c10
RewriteCond %{REQUEST_FILENAME} !/i/index.html$
RewriteRule ^(.*)$ http://xxxxxx/mobile/i/index.html [R=301,L]

2行目ですべてのファイルを指定。
3〜4行目は iモードブラウザ1.0 の指定です。
6行目で、2行目に指定したすべての要求を http://xxxxxx/mobile/i/index.html に転送します。転送の方法は301でも302でもよいと思います。
これにより、たとえば検索エンジン等で http://xxxxxx/mobile/news.html を発見してこちらを閲覧しようとした iモードブラウザ1.0 からのリクエストは、問答無用で iモード1.0 向けインデックスページに転送されることになります。

5行目については、ローカルサーバで検証したところFirefoxで

ページの自動転送設定が正しくありません
このアドレスへのリクエストに対するサーバの自動転送設定がループしています。

と表示されてアクセスできなくなったため、対策を調査してこの方法を発見しました。
これはつまり、/i/index.html が存在すれば転送を止める、
すなわち /i/index.html → /i/index.html の転送をしない、という意味でいいんでしょうかね。

一応これで、iモードブラウザ1.0 から外部cssを使ったページは見られなくなりました。
ただこれでは、/mobile/ のサブディレクトリである /i/ ディレクトリ内に置いた iモードブラウザ1.0 向けのページへのリンクもすべて /mobile/i/index.html へリダイレクトされ、永遠にアクセス不能になってしまいます。
そこで、 /mobile/i/ ディレクトリ直下に別の .htaccess ファイルを作り、以下のように記述してアップロードします。

<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
RewriteEngine On

これで /mobile/i/ ディレクトリ内の移動は問題なくできるようになりました。

動作確認のため以下のテストを行いました。
1〜3行目をコメントアウト → 正常動作
全行コメントアウト → すべてのリンクが /i/index.html に転送
4行目だけをコメントアウト → 上と同様 + 画像が表示されない
4行目を RewriteEngine Off にしてみる → 正常動作???

RewriteEngine がオンでもオフでも正常動作することについてしばし考えましたが、結局、下位ディレクトリに別の .htaccess を置き、そこに何らかのルールを設定することで、上位ディレクトリの .htaccess の影響を及ばなくしたもの、と考えます。

参考サイト:
.htaccess(mod_rewrite)でスマートフォン向けページへリダイレクトさせる方法|Blog|Skyward Design
サイト全ページをある1つのページに転送したい。 - Yahoo!知恵袋
トップに設置し、下層フォルダに影響しない方法は?:相互リンクSEO-P-Link公式サイト
他多数




posted by nambei-x at 17:26| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。