正規表現で動的ページを静的ページに変換する方法
- 正規表現を使用して、動的な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]
- haruhiko39
- お礼率44% (4/9)
- SEO
- 回答数5
- ありがとう数14
- みんなの回答 (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)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 >ブラウザ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に引っ掛からないので)
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 今思ったのですが、私のサンプルをそのままコピペしちゃいましたか? もしそうなら、 $3[L] ではなく、 $3(半角スペース)[L] です。
補足
回答頂きありがとうございます。 私も後で気付いたので、修正して再度試したのですが、だめでした。 ブラウザfirefoxのURL欄にはまだ動的ページのURLのまま表示されてしまいます。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 正規表現的には合ってるはずなんですが・・・? RewriteLog "適当なパス" ← Linuxだと/var/log/Rewrite.Logとか RewriteLogLevel 3 ← あんまり大きいと見にくい ぐらいにして、ログファイルを見てみてください。 アドレスが変換されていく過程が出力されますので、最終的に欲しいアドレスになっているか確認してください。 多分、別の問題だと思うのですが・・・。
補足
回答頂きありがとうございます。 こちらの方法は始めて知りました。 まだ、試していませんが、 解決に近づけるよう頑張ります。どうもありがとうござます。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 なんとなく変ですね・・・。 RewiteRule ^/myindex/([0-9]{4})([0-9]{2})([0-9]{2}).html$ /myindex.php?year=$1&mon=$2&day=$3[L] ではないですか?
補足
教えて頂いたテキストを試したのですが、サイトにアクセスできない(エラーメッセージ)が出るようになりました。 せっかく教えてくださったのにうまく行かず残念ですが、新たな方法を試してみたいと思います。どうもありがとうございました。
関連する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)を除外するにはどうすればいいのでしょうか? ご回答お願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 正規表現
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
- 正規表現について
正規表現について 正規表現について昨日から取り組み始めたのですが、ごく簡単な説明ですでに四苦八苦しております。 下記HPを参考に始めたのですが、「^http://.+/$」の場合の「.+」の部分がよくわからずにおります。 http://www.scollabo.com/banban/php/php_15.html とりあえず、 「^http://」は、http:// から始まる場合 「/$」は / が末尾に来る場合 という理解なのですが、この私の理解で間違いはないでしょうか? 「.+」では、「 . 」は任意の1文字と説明があるのですが、ここでの 任意 とはどの部分をさす事なのかもよくわからないでいます。(/でしょうか?) リンク先HPでも本来十分解説がされているのかもしれませんが、「.+」について少しご解説をいただけないでしょうか。 よろしくお願いします。
- ベストアンサー
- PHP
補足
説明不足で申し訳ございません。 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の表記のままなのです。 いろいろご親切に教えていただきありがとうございます。