正規表現で動的ページを静的ページに変換する方法

このQ&Aのポイント
  • 正規表現を使用して、動的なURLを静的なURLに変換する方法を知りたいです。
  • 具体的には、http://www.mysite.com/myindex.php?year=2010&mon=08&day=06のような動的なURLを、http://www.mysite.com/myindex/20100806.htmlのような静的なURLに変換したいです。
  • 現在は.htaccessファイルで正規表現を使用して変換を試みていますが、うまく動作しません。修正方法を教えてください。
回答を見る
  • ベストアンサー

正規表現で動的ページを静的ページに見せたい!

正規表現で動的ページを静的ページに見せたい! 次のように動的ページを静的ページにしたと考えています。 動的ページ:http://www.mysite.com/myindex.php?year=2010&mon=08&day=06↓ ↓ 静的ページ:http://www.mysite.com/myindex/20100806.html 2010は西暦(4桁)、08は月(2桁)、06は日(2桁)を表す。 .htaccessで正規表現を次のように記述しましたがうまく動作しません。 ご教示いただけますよう宜しくお願いします。 RewriteEngine on RewiteRule ^/myindex/([0-9]+{4})([0-9]+{2})([0-9]+{2}).html$ /myindex.php?year=$1&mon=$2&day=$3[L]

  • SEO
  • 回答数5
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

こんにちは。 かなり勘違いをされているようで・・・。 RewiteRule ^/myindex/([0-9]{4})([0-9]{2})([0-9]{2}).html$ /myindex.php?year=$1&mon=$2&day=$3 [L] この場合、 ブラウザに「http://www.mysite.com/myindex/20100806.html」と入力 ブラウザのアドレスはそのままで、実際に表示されるのが、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 です。 RewiteRule ^/myindex/([0-9]{4})([0-9]{2})([0-9]{2}).html$ /myindex.php?year=$1&mon=$2&day=$3 [R=301,L] この場合、 ブラウザに「http://www.mysite.com/myindex/20100806.html」と入力 R=301でリダイレクトするので、ブラウザのURL欄は、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 に置き換わる。 実際に表示されている内容も、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 になる。 今、haruhiko39さんがやってる事は、 ブラウザに、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 と入力。 ブラウザの表示は、 http://www.mysite.com/myindex/20100806.html になって欲しいが、実際に表示されているページは、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 であって欲しい・・・。 こんな事は不可能です。 [R=301]は単純なリダイレクト処理なので、ブラウザのURLが書き換わるのは当然。 [L]は、左のアドレスが入力された場合、アドレスを書き変えずに、実際には右のファイルを表示するという動きになります。 この辺り、理解できましたか???

その他の回答 (4)

回答No.4

こんにちは。 >ブラウザfirefoxのURL欄にはまだ >動的ページのURLのまま表示されてしまいます。 これはどういう事ですか??? http://www.mysite.com/myindex/20100806.html をブラウザのURLに打ち込んだら、 http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 に変換(リダイレクト)されたという事ですか??? もともと http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 と打ち込んだら、そのままなのは当然ですが・・・? (RewiteRuleに引っ掛からないので)

haruhiko39
質問者

補足

説明不足で申し訳ございません。 RewriteEngine on RewiteRule ^/myindex/([0-9]+{4})([0-9]+{2})([0-9]+{2}).html$ /myindex.php?year=$1&mon=$2&day=$3 [R=301,L] 最後の方に[R=301]を付けると、ブラウザのURL欄が 通常なら http://www.mysite.com/myindex.php?year=2010&mon=08&day=06 となるところ R=301と付けると、 http://www.mysite.com/myindex/20100806.html と静的ページのURLの表記に書き換わると聞きました。 しかし、当方でR=301をつけてもブラウザのURL欄は動的ページのURLの表記のままなのです。 いろいろご親切に教えていただきありがとうございます。

回答No.3

こんばんは。 今思ったのですが、私のサンプルをそのままコピペしちゃいましたか? もしそうなら、 $3[L] ではなく、 $3(半角スペース)[L] です。

haruhiko39
質問者

補足

回答頂きありがとうございます。 私も後で気付いたので、修正して再度試したのですが、だめでした。 ブラウザfirefoxのURL欄にはまだ動的ページのURLのまま表示されてしまいます。

回答No.2

こんばんは。 正規表現的には合ってるはずなんですが・・・? RewriteLog "適当なパス" ← Linuxだと/var/log/Rewrite.Logとか RewriteLogLevel 3 ← あんまり大きいと見にくい ぐらいにして、ログファイルを見てみてください。 アドレスが変換されていく過程が出力されますので、最終的に欲しいアドレスになっているか確認してください。 多分、別の問題だと思うのですが・・・。

haruhiko39
質問者

補足

回答頂きありがとうございます。 こちらの方法は始めて知りました。 まだ、試していませんが、 解決に近づけるよう頑張ります。どうもありがとうござます。

回答No.1

こんばんは。 なんとなく変ですね・・・。 RewiteRule ^/myindex/([0-9]{4})([0-9]{2})([0-9]{2}).html$ /myindex.php?year=$1&mon=$2&day=$3[L] ではないですか?

haruhiko39
質問者

補足

教えて頂いたテキストを試したのですが、サイトにアクセスできない(エラーメッセージ)が出るようになりました。 せっかく教えてくださったのにうまく行かず残念ですが、新たな方法を試してみたいと思います。どうもありがとうございました。

関連するQ&A

  • 正規表現について

    いま.Netで正規表現にチャレンジしているのですが、どこが問題なのか分からず、投稿させていただきました。 正規表現のパターンです。 \\[Cc]\[(?<$0>[0-9]+),(?<$1>[0-9]+),(?<$2>[0-9]+)\] で、マッチさせたい文字列は、 \C[255,255,255] です。「[255,255,255]」の数字の部分は、一桁から三桁までの数字であれば何でもOKです。 マッチしないことは、http://jsregex.com/を使って調べました。 どうぞよろしくお願いします。

  • 正規表現の際、特定の単語を除外したい

    apacheのmod_rewriteでURLを書き換えたいと思っています。 以下が.htaccessのコードになります。 ------------------------------------------------------------------------- RewriteEngine On RewriteRule ^([a-z0-9_-]+).htm$ execute.php?id=$1 ------------------------------------------------------------------------- 例えば、”http://moge/test.htm”にアクセスすると”http://moge/execute.php?id=test”と同じようになるというものです。 ディレクトリにはexecute.phpの他にindex.htmを置きたいと思っているのですが、上のhtaccessを設置すると、”http://moge/execute.php?id=index”に飛ばされてしまいます。そこで、正規表現で特定の単語(index)を除外するにはどうすればいいのでしょうか? ご回答お願いします。

  • 正規表現

    PHPのプログラミングの勉強をしています。 正規表現を使って?の1文字をマッチさせたいのですが http://hogehoge.com/?hoge=hoge などの/?の場合は正規表現でマッチさせないようにしたいのです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 正規表現

    http://www.***/ というHPで http://www.***/index.cgi?page=1 http://www.***/index.cgi?page=2 : : :       : http://www.***/index.cgi?page=10 という風になっていて これをひとつにまとめる正規表現はどうやるのでしょうか?正規表現でDLできるソフトを使いたいのです また例として\.(htm|html|cgi|php)$ こんな風に書いてありました

  • .htaccessの正規表現の書き方

    あるサイトでhtmlで書かれていたものをphpを利用するため●●.phpに変更しました。 .htaccessで301リダイレクトの設定をしようと考えているのですが、正規表現の仕方が分かりません。 下記の場合どのような書き方をすればよろしいでしょうか? リダイレクト文含め解説も入れていただけたら幸いです。 よろしくお願いします。 http://www.zzz.com/okinawa/test1.html → http://www.zzz.com/okinawa/test1.php http://www.zzz.com/okinawa/testdetail1.html → http://www.zzz.com/okinawa/test1.php http://www.zzz.com/kagoshima/test1.html → http://www.zzz.com/okinawa/test1.php http://www.zzz.com/kagoshima/testdetail1.html → http://www.zzz.com/okinawa/test1.php http://www.zzz.com/●●/▲1.html ※●●は都道府県毎のディレクトリで47あります。 ※▲は「test」「testdetail」の2種類のコンテンツがあります。 ※1の数字は連番で仮に1~100の100ファイルあります。

  • htaccessの正規表現でのリダイレクト記述方法

    htaccessの正規表現でのリダイレクト記述方法についてお尋ねします。 http://xxx.com/123456 とアクセスがあった時に http://xxx.com/no/123456.html にリダイレクトする書き方を教えてください。 なお、 1)xxx.jp/にはindex.htmlやその他のファイルが存在する予定です。 2)「123456」に当たる部分は必ず数字6ケタです。

  • この正規表現のパターンについて

    この正規表現のパターンについての意味を教えてほしい。 【疑問】 $pattern ="/((?:.*?<p>.*?<\/p>){3}).*/mis"; ↓の中の (?:.*?<p>.*?<\/p>){3} ↓の中の 先頭の「 ( 」の次の、「 ?: 」の意味がわかりません。 これは、どのような意味があるのでしょうか? 【今までの流れ】 あることが知りたくて質問しました。 そのページは、こちら http://okwave.jp/qa/q7300031.html 教えていただいた、正規表現で、「出来た、出来た」と喜んで、ベストアンサーとして質問を締め切りました。 正規表現って、言語などの環境により、多少の違いがありますよね? そこで、phpの正規表現を勉強しようと、その正規表現を見ました。 しかし、なぜ、これらの文字があるのかわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現について

    Perlの初心者です。 正規表現の指定方法がよくわかりません。 ディレクトリー内の該当するCSVファイルの抽出をしたいのですが、 "xyz20050105*.csv"に該当するデータすべてを抽出したい。 下記のように、詳細に指定して該当するCSVのファイル名を取得したいのですが、これだとディレクトリー内がすべて表示されてしまいます。 @FTPlist = grep ("$head$year$mon$mday*.csv", readdir(DIR)); どのように指定すればよいのでしょうか?

    • ベストアンサー
    • Perl
  • 正規表現について

    正規表現について 正規表現について昨日から取り組み始めたのですが、ごく簡単な説明ですでに四苦八苦しております。 下記HPを参考に始めたのですが、「^http://.+/$」の場合の「.+」の部分がよくわからずにおります。 http://www.scollabo.com/banban/php/php_15.html とりあえず、 「^http://」は、http:// から始まる場合 「/$」は / が末尾に来る場合 という理解なのですが、この私の理解で間違いはないでしょうか? 「.+」では、「 . 」は任意の1文字と説明があるのですが、ここでの 任意 とはどの部分をさす事なのかもよくわからないでいます。(/でしょうか?) リンク先HPでも本来十分解説がされているのかもしれませんが、「.+」について少しご解説をいただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • URL正規表現

    以下のようなURLにもマッチする、正規表現を教えてください http://php.url-dummy.com/program:php:etc:callback_function

    • ベストアンサー
    • PHP

専門家に質問してみよう