.htaccessにおけるmod_rewriteの正規表現について質問です。


以下のようなあらゆるパターンのURLにアクセスしたら、
「↓」で示したようなURLにジャンプさせたいと思っています。

http://before-example.jp/before/123456789.htm
http://before-example.jp/before/123456789.html
http://before-example.jp/test/123456
http://before-example.jp/test/aaa/bbb/555.html



http://after-example.jp/after/


ここでのポイントは、ジャンプ前のURLはドメイン名部分と
数字部分のみ存在することが確実で(ただし数字の桁は1~9桁まで不確定)、
ディレクトリ名の文字列や末尾(スラッシュなのか拡張子なのか)は
さまざまであり事前に予想できないとします。


このとき、以下のようなRewriteRuleを書いてみましたが、うまくマッチしません。
どこが悪いのでしょうか?


RewriteEngine on
RewriteRule ^([0-9]{1,9})\.htm?$ http://after-example.jp/after/test=$1&REQ_URI=%{REQUEST_URI}


解決につながる回答をくださった方には500ポイント差し上げます。

回答の条件
  • 1人2回まで
  • 登録:2009/02/09 09:06:44
  • 終了:2009/02/10 13:11:26

ベストアンサー

id:ilo No.2

sakai回答回数9ベストアンサー獲得回数22009/02/09 14:11:06

ポイント500pt

こんな感じでいかがでしょうか?

RewriteEngine on

RewriteRule ([0-9]{1,9})(\.htm|\.html)?$ http://after-example.jp/after/?test=$1&REQ_URI=%{REQUEST_URI}

^があると先頭が数字でないとマッチしないので、ディレクトリ名に対応できないです。

拡張子部分は(\.htm|\.html)?とすることで、.htmか.htmlか省略かの3パターンに対応できます。

id:REMsuimin

ありがとうございます! 解決しました。

ちなみになんですが、このようなリダイレクトをさせる際、ブラウザのアドレスバーに「リダイレクト前」のURLを表示したままにしておくことは可能でしょうか?

2009/02/09 18:11:39

その他の回答(2件)

id:tezcello No.1

tezcello回答回数460ベストアンサー獲得回数692009/02/09 11:27:43

ポイント20pt

> うまくマッチしません。

○○の場合ダメだとか具体的に示された方が良いかと。

htm?

では、htm , ht の場合しかマッチしないように思いますが?


コメント欄を開けておいて頂けるとフォローがしやすいです。

id:REMsuimin

>○○の場合ダメだとか具体的に示された方が良いかと。

そうですね、いろいろいじってみて、拡張子がない(数字で終わる)パターンだとマッチさせることは出来ましたが、拡張子をつけると途端にダメでした。

私が提示した正規表現では、末尾が「.htm」でも、ジャンプ先URLに飛ばないと思います。


>コメント欄を開けておいて頂けるとフォローがしやすいです。

はてな初心者のため、よく分からず、とりあえずコメント表示しない設定にしておりましが、

ご指示いただいた通りにコメントを表示する設定に変更いたしました。

2009/02/09 12:01:37
id:ilo No.2

sakai回答回数9ベストアンサー獲得回数22009/02/09 14:11:06ここでベストアンサー

ポイント500pt

こんな感じでいかがでしょうか?

RewriteEngine on

RewriteRule ([0-9]{1,9})(\.htm|\.html)?$ http://after-example.jp/after/?test=$1&REQ_URI=%{REQUEST_URI}

^があると先頭が数字でないとマッチしないので、ディレクトリ名に対応できないです。

拡張子部分は(\.htm|\.html)?とすることで、.htmか.htmlか省略かの3パターンに対応できます。

id:REMsuimin

ありがとうございます! 解決しました。

ちなみになんですが、このようなリダイレクトをさせる際、ブラウザのアドレスバーに「リダイレクト前」のURLを表示したままにしておくことは可能でしょうか?

2009/02/09 18:11:39
id:ilo No.3

sakai回答回数9ベストアンサー獲得回数22009/02/09 18:51:54

ポイント20pt

http://before-example.jp/before/123456789.htm

と入力した時に

RewriteRule ([0-9]{1,9})(\.htm|\.html)?$ http://after-example.jp/after/?test=$1&REQ_URI=%{REQUEST_URI}

この記述ならアドレスバーの内容は変わらず

http://after-example.jp/after/?test=123456789&REQ_URI=/before/12...

にアクセスします。


RewriteRule ([0-9]{1,9})(\.htm|\.html)?$ http://after-example.jp/after/?test=$1&REQ_URI=%{REQUEST_URI} [R]

このように末尾に[R]をつけるとリダイレクトされるため、アドレスバーの内容が

http://after-example.jp/after/?test=123456789&REQ_URI=/before/12...

に変わります。


↓リダイレクト以外にも色々なオプションがあるので参考にどうぞ。

http://blog.dawgsdk.org/weblog/archives/411011

id:REMsuimin

末尾に[R]があるかないか・・・の違いだけ、ということでしょうか??

しかし実験してみましたところ、[R]がない場合でもアドレスバーもafter-・・・の方に変化してしまいます。

ブラウザはIE7およびFF3で試してみましたが、どちらでもアドレスバーは変化してしまいます。なぜでしょうか・・・??

2009/02/10 03:19:42
  • id:ilo
    回答数の上限に達したので、コメントから失礼します。
    リダイレクト先をURLで記述すると、アドレスバーの内容が書き変わるようです。


    http://tech.bayashi.jp/archives/entry/techweb/2007/001981.html
  • id:REMsuimin
    なるほど・・・、やっぱりアドレスバーを維持したまま
    別のドメインに飛ばすのは無理なんですね。

    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません