• ベストアンサー

RewriteRuleについて教えてください

RewriteEngine On RewriteBase / RewriteRule ^num([0-9]+)/$ http://aaaa.jp/number.html?inp=$1 [L] 上記にように、.htaccessに設定しましたが、 ブラウザのアドレスバーに、http://aaaa.jp/number.html?inp=1のように、表示されますが、 アドレスバーにもhttp://aaaa.jp/num1のように表示したいですが、どうすれば良いですか?

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 一番てっとりばやいのは[L]を[P]に変えて内部的にはリバースプロクシーにする事かねぇ。[L,P]でも同じ意味になる。Lはここで打ち切りという意味で、Pはここで打ち切って(リバース)プロクシーをするという意味だ。 RewriteRule ^num([0-9]+)/$ http://aaaa.jp/number.html?inp=$1 [L] ↓ RewriteRule ^num([0-9]+)/$ http://aaaa.jp/number.html?inp=$1 [P]  こうすると、http://aaaa.jp/num20111203/にアクセスすると、aaaa.jpのApacheが「http://aaaa.jp/number.html?inp=20111203」のコンテンツを取得してクライアントに返すという動作になる。もちろん、mod_proxyとかいれとかないと駄目よん。hostsやDNSでaaaa.jp→127.0.0.1であるという設定も要るな。  Apacheでaccess_logをはき出しているのであれば、アクセスがあるたびにリバースプロクシーの分と本家の分、2行のアクセスログがでてくるのが分かるだろう。 ついでに RewriteRule ^num([0-9]+)/$ http://aaaa.jp/number.html?inp=$1 [L] というのがApache的にどういう動作になるのか解説しておこう。Lがここで打ち切りと冒頭で説明したが、では打ち切って何をするのか。 ・http://aaaa.jp/num9999/というURLでリクエストきました。 ・このRewriteRuleに該当します。 ・http://aaaa.jp/number.html?inp=9999というURLに書き換えます。 ・Lがあるのでこれで処理を終えます。 ・クライアントにHTTPレスポンスコード302を返します。新URLはhttp://aaaa.jp/number.html?inp=9999です。 ↓ 以上の動作がApacheにより行われる事で、Webブラウザーは「ああ、http://aaaa.jp/number.html?inp=9999を取りに行けってか」とURLを書き換える訳だ。mod_rewriteはURLを書き換える(rewrite)訳だが、書き換えてその後どうするのか(裏で何が動いているのか)を知っとく事が大事なんだぜ。ここで[P]を指定すると、同じくここで打ち切った後、自分がプロクシーサーバーとなりて新URLにアクセスし、コンテンツをそのままWebブラウザーに返すようになる。つまり、HTTPレスポンスコードは200だ(プロクシー先が存在しなければ404とかだけど)。

supapa
質問者

補足

ご回答ありがとうございました。 修正してみたら、今度はcssやイメージが適用されないですが。。。 ソースのパスは、 <link rel="stylesheet" href="base.css" type="text/css" /> <img src="images/aaa.jpg" alt="aaa" /> となっています。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

RewriteRule ^num([0-9]+)/$ number.html?inp=$1 [L] でしょう。

関連するQ&A