mod_rewriteでのURLリライトに関する質問です。


/hoge/fuga/piyo/

というURLを

/index.html?var[0]=hoge&var[1]=fuga&var[2]=piyo
(パラメータ数は不定)

へmod_rewriteのみでリライトする方法はありますでしょうか。
無ければ諦めてアプリ側で対応しようと思っています。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/07/22 12:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント35pt
RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+)/([a-z]+)/ /index.html?var[0]=$1&var[1]=$2&var[2]=$3 [QSA,L]

こんなとこ?

id:FnuLnu

パラメータ数は不定です。

hoge、fuga、piyo、foo、barと続く可能性もあります。

2008/07/15 14:21:00
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント35pt

パラメータの数が無限に続く事は無いと思いますが9を超えますか?

9を超えないのであればb-wind 氏の回答を元にして、想定される分だけ拡張していけばよろしいのでは?

(長くなると見づらいので4つまでしか書いてません)

RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)/ /index.html?var[0]=$1&var[1]=$2&var[2]=$3&var[3]=$4 [QSA,L]
RewriteRule ^/([a-z]+)/([a-z]+)/([a-z]+)/ /index.html?var[0]=$1&var[1]=$2&var[2]=$3 [QSA,L]
RewriteRule ^/([a-z]+)/([a-z]+)/ /index.html?var[0]=$1&var[1]=$2 [QSA,L]
RewriteRule ^/([a-z]+)/ /index.html?var[0]=$1 [QSA,L]
id:FnuLnu

確かに現実的には無限にパラメータが続くわけはないので、

(書いていて思い出しましたが、IEのURL最大長制限もありますし)

パラメータ数上限を決めて、その個数分リライトルールを設定するのが、現実的な解法のような気もします。

ただ、mod_rewriteの文法上そういったループ的な記述が可能なのかどうかは、興味があるので引き続き回答を募集したいと思います。

2008/07/15 18:04:11
  • id:kn1967
    RewriteRuleにNというオプション(QSAやLと書いてある部分)があったりもしますけど
    ループ2回目だからvar[2]、ループ3回目だからvar[3]といった対応をどうすれば良いのか
    皆目検討もつきませんし、そもそもそれが出来るのかどうか。
    出来ないという事を証明するのは困難を極めますし・・・。
    そこで現実的な方法を回答させていただいた訳なのですが・・・。

    あまりお力になれず申し訳無いです。
  • id:FnuLnu
    「出来ないという事を証明」する必要はありませんよ。
    何だかこちらこそ恐縮です。

    「無ければ諦めて~」は「アプリ側でもにょもにょすれば出来るよ」に対する予防線として書いたものなので。
  • id:FnuLnu
    http://q.hatena.ne.jp/1196312004

    類似質問ありました。
    あっちでも不定個のパラメータだと、
    純粋にmod_rewrite単体では対応不可能そうだ、
    という雰囲気ですね。

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

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

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

回答リクエストを送信したユーザーはいません