mod_rewriteがステキな件
あるプロジェクトでmod_rewriteとmod_layoutが大活躍。
実は一年くらい前に関わったプロジェクトで活用した技術とほぼ同じものを、今回の新しプロジェクトにおいても実現をしたい、とのご要望によりサブ・プロジェクトがスタート。
内容は、
・モバイルのサイトを、特定のネットワークからはPCで閲覧させたい。
・つまりは管理者及び特定のスタッフは携帯からではなくPCで検証したい。
・その他のネットワークからのアクセスは携帯はモバイルサイト、PCはPCサイトにリダイレクトさせる
という感じ。まぁ普通の話なんだけどクライアントのPC環境が問題。IEのみしか使用できない。。。FireFoxならプラグインだけど良いと思うが、全国に散らばっているPCに管理者がFireFoxをインストールする手間を考えると、サーバーサイドで制御する方がコスト的に安いと言うことか。ナルホド。
前回ノウハウが溜まっているので余裕かと思いきや・・・・。あらら、環境が全然違います。サーバー環境やらソースを見て愕然。。しかもクライアント先からしかネットワークに入れず、完全にひとり状態で(まわりが敵と言うわけじゃァないんだけど・・)かなり顔も青くなる・・。
問題はファイルが全てXHTMLで書かれていること。
中身は問題ないとして、ファイル名が問題。***.xhtmlというファイル名だと、IE6では正常にパースしてくれず・・・。困った困った。
***.xhtmlというファイル名でブラウザからアクセスをした場合、HTTPヘッダを見る限りは
Content-Type: application/xhtml+xml
となるので、正常にパースできないブラウザにおいてはファイルをダウンロードするか、他のアプリケーションで開くか、というダイアログが表示される、もしくは、ブラウザに「XMLパースエラー」が表示されてしまう。
XHTMLファイルの中身自体は正常に記述されていて、拡張子をHTMLに変更するだけでブラウザは即座に正常に描写を始めるのだが、ファイル管理の問題から拡張子を全て変更するのは問題あり。
で、mod_rewrite。
mod_headerでいけるのかと思ったが、WEBで調べる限りはmod_rewriteで処理する方が圧倒的に事例が多い。.htaccessで制御が可能なのでお手軽でもある。
.htaccessに以下の一言を記述するだけで、
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} \.xhtml
RewriteRule .* – “[T=text/html; charset=Shift_JIS]” [L]
*****.xhtmlのファイル名を持つファイルのHTTPヘッダは
Content-Type: text/html
となってブラウザは普通にコンテンツを描写してくれる。
あとは前回のプロジェクトと同じで、mod_layoutでスタイルシートを与えて画面サイズを携帯画面幅に調整して、mod_headerでユーザーエージェントをdocomoに変更して、完了。
あぁ、ヨカッタヨカッタ。
コメントを残す