人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.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ポイント差し上げます。

●質問者: REMsuimin
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.htaccess mod_rewrite ON REQUEST_URI URL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●20ポイント

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

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

htm?

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


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

◎質問者からの返答

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

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

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


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

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

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


2 ● sakai
●500ポイント ベストアンサー

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

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パターンに対応できます。

◎質問者からの返答

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

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


3 ● sakai
●20ポイント

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ