リダイレクトの記述方法について、教えてください。


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形式にしています。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/07/29 13:33:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント100pt

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に記述して置いてください。

id:moony_crescent

頂いた内容を記述したところ、リダイレクト先としてうまく「archive」内の「i」にある指定されたページ名を表示しました!……が、拡張子が「php」のままで、404エラーとなってしまいました。

これをリダイレクト先として「html」にするには、どのように記述すればよろしいでしょうか。

最後の最後までどうもすみません。

 

【追伸】

以前にコメントで頂いた記述をもとに見よう見まねで以下のように書いたところ、うまくいきました!

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)

RewriteRule ^/?([A-z_0-9/-]+)\.php$ /archives/i/$1.html [R,L]

今回はお時間をたくさんとっていただきまして、本当にどうもありがとうございました。

2010/07/29 13:32:44

その他の回答1件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント40pt

こんなんでどうでしょう?

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteRule ^archive/(.+)\.php$ /archive/i/$1.html [R,L]
id:moony_crescent

早速のご回答を、ありがとうございます。

いただいた記述をしてみましたが、やはりiPhoneのsafariで直接に個別ページを表示させようとすると、リダイレクトされずにPC版の内容で表示されてしまいました。

もちろんページそのものはちゃんとあり、正しくリンクを貼ってあるiPhone専用TOPページからだと表示されるのですが……。

2010/07/26 17:17:18
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント100pt

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に記述して置いてください。

id:moony_crescent

頂いた内容を記述したところ、リダイレクト先としてうまく「archive」内の「i」にある指定されたページ名を表示しました!……が、拡張子が「php」のままで、404エラーとなってしまいました。

これをリダイレクト先として「html」にするには、どのように記述すればよろしいでしょうか。

最後の最後までどうもすみません。

 

【追伸】

以前にコメントで頂いた記述をもとに見よう見まねで以下のように書いたところ、うまくいきました!

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)

RewriteRule ^/?([A-z_0-9/-]+)\.php$ /archives/i/$1.html [R,L]

今回はお時間をたくさんとっていただきまして、本当にどうもありがとうございました。

2010/07/29 13:32:44
  • id:tasklight
    下記のように指定してみて下さい。

    RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
    RewriteRule archive/(.*)\.php$ archive/i/$1.html [L]

  • id:moony_crescent
    ご回答をありがとうございます。
    いただいた内容での記述をしてみましたが、やはりy-kawazさんのときと同様、iPhoneのsafariで直接に個別ページを表示させようとすると、リダイレクトされずにPC版の内容で表示されてしまいました。
    いったい何が悪いのでしょうか……。
    ぜひ「ここを確認してみろよ」とか、「この設定はどうなっている?」といった確認事項でも結構ですので、よろしくお願い致します。
    (回答可能数を2から5に上げさせていただきました)
  • id:rouge_2008
    質問文では、リダイレクト先が次のようになっていますが、間違いありませんか?

    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]
  • id:moony_crescent
    可能性の示唆をありがとうございます。
    しかし残念ながら、「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」フォルダ外にできるようになれば問題なさそうなのですが……。
  • id:rouge_2008
    .htaccessには、質問文にある記述以外は書いていないのでしょうか?
    それらの記述より先に追加しても動作しませんか?
    以下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]
  • id:moony_crescent
    何度もご確認をいただきありがとうございます。

    当方の.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]

    ということは、(なぜかは判りませんが)個別ページそのものがリダイレクトできない、ということなんでしょうかね……。

    気持ち悪いのですが、「そういうものだ」として思いこむようにしてみます。
  • id:rouge_2008
    すみません。いくつか確認があります。

    1.iPhone用のページ(ブログ?)はどのように作成したのですか?
    MT(5?)のシステムメニューから通常通りに作成したのですか?

    2.iPhone用のページの記事のファイル名は、「dd-hhnnss.html」という形式ですか?

    3.iPhone用のページもダイナミックにしているのですか?

    4.おそらくテンプレートのアーカイブマッピングを変更していると思いますが、設定を元に戻しても大丈夫ですか?
    現在のままではリダイレクトされませんが、アーカイブマッピングを元に戻した上で、iPhone用の個別記事のファイル名を元記事のファイル名と同じにすれば、まだ分かりませんが、もしかしたら大丈夫かもしれません。
    サーバーに接続して、「archive」→「2010」→「07」あるいは「06」、「05」等、記事のあるフォルダを開いて、中のファイル名を確認してみてください。
    「dd-hhnnss.html」という形式のファイルは存在しないと思います。

    5.どのディレクトリに設置してある.htaccessに記述しましたか?
  • id:moony_crescent
    色々と考えていただきまして、本当にありがとうございます。

    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に記述しています。
  • id:rouge_2008
    4.に関しては元記事のアーカイブの事でしたが、アーカイブマッピングを変更する必要はありませんでした。
    違う場所に設置されている.htaccessに記述する事で対処できましたのでお試し下さい。
  • id:rouge_2008
    お返事が遅くなってすみません。
    解決して良かったです。
    拡張子の事をうっかり忘れていました。m(__;)m
    ちなみに回答の場合は、以下のように拡張子部分を指定すると大丈夫なはずです。
    (希望の動作をさせる為の記述は、何種類かありますので、以下に限定されません。)

    RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
    RewriteRule ^/?([0-9]+)/(.*)\.php$ /archive/i/$1/$2.html [R,L]


    たくさんのポイントといるかをありがとうございました。
  • id:moony_crescent
    こちらこそ、たくさんのお時間をとっていただき、本当にありがとうございます。
    アレだけ悩んでいたのが嘘のように快適にリダイレクトされています。
    当方のページは数字のみでできていますので、確かにコメントで頂いた記述がシンプルでいいですね。
    早速こちらに反映させていただきました。
    最後の最後までどうもありがとうございました。
    また機会がありましたら、どうぞよろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません