MovableTypeでブログを作成しています。
そこに新たに「i」というディレクトリを用意して、iPhone専用ページを作成しました。
そのうえで.htaccessファイルには以下のように記述しています。
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^$ i/ [L]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^index\.php$ i/ [L]
これでトップページはうまくリダイレクトできました。
元)http://www.mydomein.jp/
先)http://www.mydomein.jp/i/
しかし個別ページは、もともとMovableTypeの設定で「archive」というディレクトリ内の、
さらに年別・月別ディレクトリに作成しているため、どのように表記すればよいか判りません。
色々と試したのですが、正規表現が判っていないためにうまくリダイレクトできませんでした。
以下のようにリダイレクトさせたい場合、どのようにhtaccessを記述すればよいでしょうか。
元)http://www.mydomein.jp/archive/yyyy/mm/dd-hhmmss.php
先)http://www.mydomein.jp/archive/i/yyyy/mm/dd-hhmmss.html
ちなみにMovableTypeの元記事はphp形式ですが、iPhone専用ページは通常の静的なページのため、
html形式にしています。
「http://mydomein.jp/」直下ではなく、「archive」ディレクトリ下の.htaccessに次の記述を追加してみてください。
(WEBルート直下に記述した場合の記述は、分かりませんでした。)
RewriteEngine on # 次の2行を追加 RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod) RewriteRule ^/?([0-9]+)/(.*)?$ /archive/i/$1/$2 [R,L] # 以降は元からある記述です。 # don't serve mtview.php if the request is for a real directory # (allows the DirectoryIndex lookup to function) RewriteCond %{REQUEST_FILENAME} !-d
※トップページをリダイレクトする記述は、そのままWEBルート直下の.htaccessに記述して置いてください。
こんなんでどうでしょう?
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod) RewriteRule ^archive/(.+)\.php$ /archive/i/$1.html [R,L]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule archive/(.*)\.php$ archive/i/$1.html [L]
いただいた内容での記述をしてみましたが、やはりy-kawazさんのときと同様、iPhoneのsafariで直接に個別ページを表示させようとすると、リダイレクトされずにPC版の内容で表示されてしまいました。
いったい何が悪いのでしょうか……。
ぜひ「ここを確認してみろよ」とか、「この設定はどうなっている?」といった確認事項でも結構ですので、よろしくお願い致します。
(回答可能数を2から5に上げさせていただきました)
http://www.mydomein.jp/archive/i/yyyy/mm/dd-hhmmss.html
iフォルダの中にarchiveフォルダがあるのではないですか?
その場合は次のようになります。
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^archive/(.+)\.php$ i/archive/$1.html [R,L]
しかし残念ながら、「archive」フォルダの中に「i」フォルダが存在している状況です。
もともとMovableTypeの設定で、アーカイブ記事(個別ページ)の作成は「archive」フォルダを作成する、という設定をしています。
そのため、iPhone専用テンプレートを作成した際にマッピングを「i/%y/%m/%d-%h%m%s.html」としても、その個別記事のパスは、「archive/i/yyyy/mm/dd-hhmmss.html]となってしまいます。
なので「i」フォルダは、TOPページ用と個別ページ用の2箇所にできていることになってしまっています。
iPhone専用ページの個別ページだけ「archive」フォルダ外にできるようになれば問題なさそうなのですが……。
それらの記述より先に追加しても動作しませんか?
以下2つもそれぞれ試してみてください。
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^/?archive/(.+)\.php$ archive/i/$1.html [R,L]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^/?archive/([A-z_0-9/-]+)\.php$ archive/i/$1.html [R,L]
駄目な場合は、リダイレクト元に直接存在するファイル名を記述して、リダイレクトされるか確認してみてください。
例)
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^/?archive/(2010/07/27-101055)\.php$ archive/i/$1.html [R,L]
当方の.htaccessは、「The blog of H.Fujimoto」さんのところの「Perl版ダイナミック・パブリッシング」を利用しているため、多くの記述がなされています。
ただし今回のリダイレクトの記述は、その冒頭にしています。
最後に教えていただいたように、リダイレクト元として、実際に存在するファイル名を直接記述してみたのですが、これでもやはりダメでした。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^$ i/ [L]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^index\.php$ i/ [L]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^/?archive/(2010/mm/dd-hhmmss)\.php$ archive/i/$1.html [R,L]
ということは、(なぜかは判りませんが)個別ページそのものがリダイレクトできない、ということなんでしょうかね……。
気持ち悪いのですが、「そういうものだ」として思いこむようにしてみます。
1.iPhone用のページ(ブログ?)はどのように作成したのですか?
MT(5?)のシステムメニューから通常通りに作成したのですか?
2.iPhone用のページの記事のファイル名は、「dd-hhnnss.html」という形式ですか?
3.iPhone用のページもダイナミックにしているのですか?
4.おそらくテンプレートのアーカイブマッピングを変更していると思いますが、設定を元に戻しても大丈夫ですか?
現在のままではリダイレクトされませんが、アーカイブマッピングを元に戻した上で、iPhone用の個別記事のファイル名を元記事のファイル名と同じにすれば、まだ分かりませんが、もしかしたら大丈夫かもしれません。
サーバーに接続して、「archive」→「2010」→「07」あるいは「06」、「05」等、記事のあるフォルダを開いて、中のファイル名を確認してみてください。
「dd-hhnnss.html」という形式のファイルは存在しないと思います。
5.どのディレクトリに設置してある.htaccessに記述しましたか?
1.MT4を使用しており、「iPhoneテンプレートfor MT」(http://cremadesign.jp/blog/iphone/iphone_template_for_mt.html)を利用しています。
もともとテンプレートは「小粋空間」さんのを利用しているので、設置は同じく小粋空間さんの記事(http://www.koikikukan.com/archives/2008/08/06-025555.php)を参考といたしました。
2.おっしゃるように、iPhone専用ページ名は「dd-hhnnss.html」となります。
3.iPhone専用ページはダイナミックではなく、静的なhtmlページです。
4.すみません、ここの意味が判りませんでした。
現在、iPhone専用ページのテンプレートで「i/%y/%m/%d-%h%n%s.html」としてマッピングいるのですが、この「i」を削除するということでしょうか。
確かに今の状況ではiPhone専用ページができるのは、「archive」→「2010」→「07」→「28」内ではなく、「archive」→「i」→「2010」→「07」→「28」になっています。
5.http://mydomein.jp/の直下にある.htaccessに記述しています。
違う場所に設置されている.htaccessに記述する事で対処できましたのでお試し下さい。
解決して良かったです。
拡張子の事をうっかり忘れていました。m(__;)m
ちなみに回答の場合は、以下のように拡張子部分を指定すると大丈夫なはずです。
(希望の動作をさせる為の記述は、何種類かありますので、以下に限定されません。)
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^/?([0-9]+)/(.*)\.php$ /archive/i/$1/$2.html [R,L]
たくさんのポイントといるかをありがとうございました。
アレだけ悩んでいたのが嘘のように快適にリダイレクトされています。
当方のページは数字のみでできていますので、確かにコメントで頂いた記述がシンプルでいいですね。
早速こちらに反映させていただきました。
最後の最後までどうもありがとうございました。
また機会がありましたら、どうぞよろしくお願いいたします。