質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Q&A

2回答

1965閲覧

mod_rewriteによるURLの変換

Auxo

総合スコア34

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

0グッド

0クリップ

投稿2015/04/23 14:17

以下のようなURLをmod_rewriteで整形したいのですがどのように行えばよいでしょうか。

lang

1<例1-①> 2 整形前 http://example.co.jp/ 3 整形後 http://example.co.jp/index.php?param=xyz 4 5<例1-②> 6 整形前 http://example.co.jp/details/123/ 7 整形後 http://example.co.jp/details.php?id=123&param=xyz 8 9<例1-③> 10 整形前 http://example.co.jp/mypage/login/ 11 整形後 http://example.co.jp/mypage/login.php?param=xyz

lang

1<例2-①> 2 整形前 http://example.co.jp/aaa/ 3 整形後 http://example.co.jp/index.php?param=aaa 4 5<例2-②> 6 整形前 http://example.co.jp/aaa/details/123/ 7 整形後 http://example.co.jp/details.php?id=123&param=aaa 8 9<例1-③> 10 整形前 http://example.co.jp/aaa/mypage/login/ 11 整形後 http://example.co.jp/mypage/login.php?param=aaa

例1と例2の違いは「aaa」のようにモードを切り替えるパラメータが存在する場合と存在しない場合があります。

①と②③の違いは、①はシンプルな書き換えですが、②は階層が多段になるケースです。
階層は1~3階層程度になる状況で、種類が多く全てのパターンを組み合わせて書くことは現実的でない為、どのように書けばシンプルに処理できるのかなやんでおります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず例1のパラメータが存在しないパターンを、例2のパラメータが存在するパターンに統一してからrewriteをするってことでどうでしょう。

lang

1# 2# パラメータがついてないパターンをデフォルトパラメータをつけて統一する。 3# 4RewriteCond %{REQUEST_URI} !"^/(パラメータになりそうな文字列表現)/" 5RewriteRule .* %{HTTP_HOST}/デフォルトパラメータ${REQUEST_URI} [R,L] 6 7# 8# あとは通常の書き換え 9# 10RewriteCond %{REQUEST_URI} "^/(パラメータになりそうな文字列表現)/?" 11RewriteCond .* /index.php?param=%1 [P,L] 12 13RewriteCond %{REQUEST_URI} "^/(パラメータになりそうな文字列表現)/(\w+)/?" 14RewriteCond .* /details.php?id=%2&param=%1 [P,L] 15 16RewriteCond %{REQUEST_URI} "^/(パラメータになりそうな文字列表現)/mypage/login/?" 17RewriteCond .* /mypage/login.php?param=%1 [P,L]

最初のrewriteでリダイレクトすれば、それ以下のrewriteへは書き換わった状態でもう一度rewriteしてくれるかな。Lをつけてもリダイレクトなら、下の3つのルールも適用される、と思います。
すみませんが試験はしていません。
パラメータになりそうな文字列が表現できるかどうか。"mypage"以外はパラメータだってことなら簡単ですが。

投稿2015/04/28 04:40

rogueref

総合スコア727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

forとifを使う方法はどうでしょう

投稿2015/04/23 14:20

come25136

総合スコア258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Auxo

2015/04/23 14:56

回答ありがとうございます。 mod_rewriteの処理でfor構文がつかえるのでしょうか? 少し探してみたのですが、ifについては処理方法があったのですが、for構文については確認できませんでした。 参考URL等ご提示いただけますと助かります。
come25136

2015/04/23 23:16

すみません勘違いでしたm(_ _)m mod_rewriteはURLを正規表現で書き換えるものなので こういう場合はmod_rewriteではなくphpなどを使ってみてはどうでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問