- ベストアンサー
mod_rewriteの記述方法
- mod_rewriteを使用してURLのリダイレクトを行う方法について詳しく教えてください。
- http://www.xxx.com/sub/配下のhtmlファイルをhttp://www.xxx.com/に移動する方法を教えてください。
- apachのmod_rewriteを使用して、http://www.xxx.com/sub/*.htmlをhttp://www.xxx.com/*.htmlにリダイレクトする方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
httpd.confとかに以下を追記 バーチャルホストしているならその中に書くべし 1.Webブラウザーのアドレス欄はhttp://www.xxx.com/sub/aaa.htmlのまま、http://www.xxx.com/aaa.htmlをWebブラウザーに返却したい場合。 RewriteEngine On RewriteRule ^/sub/(.*) /$1 [L] 2.Webブラウザーのアドレス欄にhttp://www.xxx.com/sub/aaa.htmlと入力すると、自動的にhttp://www.xxx.com/aaa.htmlにページジャンプさせたい場合。 RewirteEngine On RewriteRule ^/sub/(.*) /$1 [R=301,L] どちらが優れているかは時と場合によりけり、たとえばcssやjsファイルを相対パスでhtml中に書いている場合は/sub/がついたままだと階層がずれるかも知れない。 念のために解説をつけておくと、RewriteRuleの後ろに半角スペース区切りで3つのパラメーターがある。1つめは変換前、2つめは変換後、3つめはフラグ(いろいろな動作をさせる)だ。 変換前は当然ヒットさせたいURLパターンを書く。今回は「^/sub/(.*)」と書かれているのが分かるだろう。これは、URLのパス部分が、半角スラッシュ、エス、ユー、ビー、半角スラッシュと続き、その後は何が何文字あろうがお構いなし、って意味になる。「え、そういう正規表現なら「^/sub/.*」でいんじゃね?」と思うかも知れないけど、括弧がついているのには意味がある。 変換後はヒットしたURLパターンがどう変化するかを書く。この時に、$1~$10で、マッチした部分集合を使う事ができる。マッチした部分集合とは、先ほどの変換前に書いたところの、括弧でくくられた部分だ。このために先ほどは括弧でくくる必要があった。 /$1と書いている。仮に/sub/hoge.html?fugafuga=halohalo&miyomiyo=kurokuroというリクエストがきた時、$1はhoge.html?fugafuga=halohalo&miyomiyo=kurokuroになる。なので、半角スラッシュと$1なので/hoge.html?fugafuga=halohalo&miyomiyo=kurokuroに変換される。 最後のフラグだが、冒頭の1番と2番の記述例を見るとフラグだけが違っている事に気づくだろう。それも、R=301というのがつくかつかないかだけだ。フラグLはこの行にヒットしたらこの行でRewrite動作は終わりという意味になる。R=301は、相手に任意のHTTPレスポンスコードを返すという意味で、今回はレスポンスコードに301(Moved Parmanent)を指定している。Rとだけ書くと302(Moved Temporary)を返すようになっている。今回は、/sub/aaa.htmlは廃止され、永久的に/aaa.htmlに繊維してほしいのではないかと思い301を返す設定を紹介した。301と302はどちらも移動なのだが、301を返すとGoogleなどの情報収集ボットがコンテンツそのままの引っ越しと判定してくれるので何かと都合がいいのだ。 後、この程度ならRewriteBaseは要らないので今回は説明を割愛する。
お礼
大変、ご丁寧なご回答ありがとうございました。