• 締切済み

mod_rewrite 動的から静的へ変換

ブログのシステムをWordPressに移行しました。 サイトへのアクセスは、次のように変わりました。 今まで html/index.php?p=123 次から html/weblog/123 (WordPress側でこのように設定) *123は、ログID例 過去のログデータはDB操作を行い、WordPressのときと同じIDに振り当てました。 過去のアクセスの仕方でも該当する記事を表示できるようにしたいです。 動的から静的へ変換すればよいかと思うのですが mod_rewrite関係がよくわかりません。 ネットで調べましたら、サンプルが静的から動的ばかりで困っています。 知識のある方のお力を貸してくださいませ。

みんなの回答

回答No.1

htmlというディレクトリがドキュメントルートだとすると、 RewriteEngine on RewriteRule ^/index.php?p=(.*)$ /weblog/$1 [R=301,L] で行けませんかね。 全くの未検証ですが。

ikarukas
質問者

お礼

一般的な書式ではこのうな記述になるのですね。 どうもありがとうございます

ikarukas
質問者

補足

回答ありがとうございます。 「p」を使用する場合は、WordPressの初期設定?で自動変換されていました。 同様に「id」という名称での変換も考えているのですが、 RewriteRule ^/index.php?id=(.*)$ /weblog/$1 [R=301,L] このように「p」を「id」に変更した場合、変換されません。 何度か実験した結果、以下のように「?」を使わないと、 期待された変換を行うことに気がつきました。 RewriteRule ^/index.phpid=(.*)$ /weblog/$1 [R=301,L] 変換前 html/index.phpid=123 変換後 html/weblog/123 「\?」としてもうまくいきません。 何か間違っているのでしょうか。 対策などありましたらお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mod_rewriteでアドレスを隠す・・・

    mod_rewriteで、たとえば、 sample.php?id=123 というのを sample/123.html と書き換えるようなruleを追加します。 このとき、 アドレス欄に 「sample/123.html」と入れれば、アクセスできるが、 「sample.php?id=123」 というアドレスを打ち込んでも、 アクセスできないようにする方法はありますか? つまり、元のアドレスやパラメータを探られないようにする方法はありますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • httpsでmod_rewriteができない

    はじめまして。 Linux環境で、apacheのhttp.confにmod_rewriteを記載し、httpsとhttpを切り替えたいと思っています。 httpd.confに以下のように記述しています。 <IfModule mod_rewrite.c> RewriteEngine on  #(1)httpで/aaaa/bbbbにアクセスされたときにhttps://~に変えたい RewriteCond %{REQUEST_URI} ^/aaaa/bbbb RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]  #(2)httpsで/cccc/ddddにアクセスされたときにhttp://~に変えたい RewriteCond %{REQUEST_URI} ^/cccc/dddd RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R] </IfModule> 上記(1)のhttpでのアクセス時には、mod_rewriteが効いてhttpsへ切り替えられるのですが、 上記(2)のhttpsでのアクセス時には、mod_rewriteが効いていないようでhttpへ切り替えられません。 rewriteログを見てみると、当サイトへhttpでアクセスした場合にはログが出力されますが、 httpsでアクセスした場合には出力されません。 そもそもhttpsでのアクセスの場合にhttpd.confのmod_rewriteが効いていないようです。 ですが、これに対しどこを調査すべきかが分かっていません。 SSLの設定自体は出来ていると思っていて、 https://xxxx.jpのようにアクセスするとちゃんとページが表示されます。 どの当たりに問題がありそうでしょうか? 解析のヒントを頂けたらと思います。 宜しくお願い致します。

  • mod_rewriteについて教えてください。

    mod_rewriteについてお願いします。 「a」と「b」というフォルダにそれぞれ「index.html」「test.html」が入っています。「a」と「b」で「index.html」「test.html」の内容はちがいます。 わたしが一番望んでいるのは http://example.com/a/以下にアクセスがあった場合 http://example.com/b/以下にリダイレクトさせるというものです。 例) http://example.com/a/test.htmlにアクセスがあったらhttp://example.com/b/test.htmlにリダイレクト。 ------------------------------------------------------------ Options +FollowSymLinks AddHandler cgi-script htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/a/$ /b/$1 [R=302,L] </IfModule> ------------------------------------------------------------ としてみましたが、リダイレクトされません。 ちなみに RewriteRule ^$ /b/$1 [R=302,L] と書くと、http://example.com/にアクセスがあった場合 http://example.com/b/にリダイレクトされましたので mod_rewriteには対応しております。 ご教授のほど、よろしくお願いいたします。

  • mod_rewriteで動的ページを静的に変更

    PHPのカテゴリで同じ質問をしているのですが、3日目になっても、回答がいただけないので、同じ質問をさせていただきます。 動的ページを静的なページにしようとして、mod_rewriteの勉強をはじめようとしているのですが、疑問が出てきたので、確認させてください。 「何を当たり前のことを言ってるんだ。」と思われるかもしれませんが、教えて下さい。 htaccessからmod_rewriteを用いて、 (1)sampl.php?mod=1&id=3 を見かけ上、(2)sample/mod_1/id_3.html のようにすることは、mod_rewriteでできるということですが、 サイト全体を静的に見せようとしたら、プログラム側の呼出し(サイト内のリンク)を、(1)の形式から(2)の形式に全て変更しないといけないのでしょうか? htaccessだけをいじれば、静的にできると思い込んでいたのですが、 プログラムを変更しないといけないとなると、覚悟が必要なもので。。。

  • mod_rewriteでアドレスを書き換えたい

    mod_rewriteでアドレスを書き換えたい思っています。 xamppでテストしていますがうまくいきません。 mod_rewrite.soの#は外しています。(つまり、.htaccess以外の設定はできていると思います) 【やりたい事】 localhost/test/index.php?p=test を  ↓ localhost/test/i/test でアクセスしたいです。 【参考にした情報】 http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 というURLを静的なアドレスでアクセスできるように以下のように設定します。 RewriteEngine on RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L] を言うのを見つけました。 【試したこと】 .htaccessをつくり RewriteEngine on RewriteRule ^/test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] と記入 【結果】 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 と表示されました。 ------------------------------------------------------------------ localhost/test/i/testでアクセスするには、.htaccessをどう書けばいいのでしょうか? 疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? 疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? よろしくお願いします。

  • apacheにおいてmod_rewriteのRewriteRuleを動的に設定したい

    apache2.xにおいて、mod_rewriteを用いて URLの動的な書き換えを行っていますが、 正規表現ではなく、URLの一部を用いて、外部(DB等)に問い合わせて、 その結果を元に書き換えができる方法を探しています。 例えば http://example.co.jp/aaa/ というURLにアクセスがあった場合、 aaaをキーにしてDBに問い合わせて、その結果を元に rewriteを行う、といったイメージです。 mod_rewriteのマニュアルを読んだのですが、 そのような事が出来そうな項目はありませんでした。 方法or代替策等ご存じの方 教えていただければと思います。

  • mod_rewriteを使用するための設定について

    お世話になります。 mod_rewriteの設定についてアドバイスいただきたいと思います。 今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバー(FedraCore2.0+Apache2.0.53)にその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。色々なサイトを参考に見て回ったところ、「httpd.conf」が怪しいと感じたのですが、 LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so の箇所もコメントアウトされておりますし、過去ログにもあったバーチャルホストの併用もしておりません。 ちなみに.htaccessは下記のような内容です。 DirectoryIndex index.htm index.php .ht RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^doc-([0-9]+).htm+ doc.php?number=$1 レンタルサーバーでは問題なく動作しておりましたので、.htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。

  • mod_rewriteによるURLの書き換え

    mod_rewriteを使ってURLの書き換えを行いたいのですが、どうしてもうまくいきません…。 http://***.main.jp/rewrite/name/index.shtml?total=num にアクセスされた場合に http://***.main.jp/rewrite/php.php?title=name?total=num に切り替えて処理させたいと思っています。 .htaccessには RewriteEngine on RewriteRule ^(.*)/index\.shtml\?total=([0-9]*)$ rewrite/php.php?title=$1&total=$2 このように記述したのですが、書き換えが行われずにindex.shtmlの内容が表示されてしまいます。 どうか、ご教授いただけませんでしょうか? サーバーはロリポップを使用しています。

  • mod_rewriteについて

    サーバーはさくらのスタンダードを利用しています。 mod_rewriteの動作について質問なのですが・・・ /item/details/5/などにアクセスがあった場合実際には /item/details.php?id=5が動作させるべく.htaccessに以下のように /(スラッシュ)で区切るとなぜか動作しません。 RewriteRule ^item/details/([0-9])/ item/details.php?id=$1 [L] 試しに以下のように_(アンダーバー)でつなげると意図する動作を 行います。 RewriteRule ^item_details/([0-9])/ item/details.php?id=$1 [L] どうすれば意図するようなurlで動作することが可能でしょうか?

  • mod_rewriteについて教えてください。

    プログラミングのカテで質問をしていたのですが、回答がいただけなかったので、こちらで、再度質問させていただきます。 レンタルサーバー屋さんにも問い合わせたのですが、サポート外ということで、答えてもらえませんでした。 すみませんが、お力をかして下さい。 .htaccsessからmod_rewriteを使って、phpでつくった動的なページを静的にみせようとしているのですが、上手く行かず、行き詰っています。(hoge.php?mod=10をhoge/mod_10.htmlでアクセスできるようにしたい) うまく動いてくれないので、RewriteEngine onにつづけて、次のような基本的なケースを試してみました。 (1) RewriteRule ^/(.*)$ ​http://www.yahoo.co.jp/​ [L] =>反応なし。 (2) RewriteRule ^(.*)$ ​http://www.yahoo.co.jp/​ [L] =>#yahooが表示される。ただし、URLが​http://www.yahoo.co.jp/​になる。 (元のulrに引数が有る場合、URLは​http://www.yahoo.co.jp/?mod=10​のようになる。) (3) RewriteRule ^(.*)$ http://×××.com/index.php [L] =>エラーになる。 Apacheに関する知識がほとんどないことですが、私なりの疑問としては、 (1)のように、^/で始まるとマッチしない。 ===>参考にしたサイト等は、ほとんど^/ではじめているのになぜ? (2)では反応するが、urlが書き換えられてしまう、また、引数のみ引き継がれる。 ===>URLはもとのまま表示させたい。 (3)自分のトップページを表示させようとすると、エラーが発生する。 ===>理由が全く分からない。 以上のような状況ですが、アドバイスをいただきたく、お願いいたします。