- ベストアンサー
正規表現で動的ページを静的ページに変換する方法
- 正規表現を使用して、動的なURLを静的なURLに変換する方法を知りたいです。
- 具体的には、http://www.mysite.com/myindex.php?year=2010&mon=08&day=06のような動的なURLを、http://www.mysite.com/myindex/20100806.htmlのような静的なURLに変換したいです。
- 現在は.htaccessファイルで正規表現を使用して変換を試みていますが、うまく動作しません。修正方法を教えてください。
- みんなの回答 (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] ではないですか?
補足
教えて頂いたテキストを試したのですが、サイトにアクセスできない(エラーメッセージ)が出るようになりました。 せっかく教えてくださったのにうまく行かず残念ですが、新たな方法を試してみたいと思います。どうもありがとうございました。
補足
説明不足で申し訳ございません。 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の表記のままなのです。 いろいろご親切に教えていただきありがとうございます。