リダイレクトのためのhtaccessの書き方について。

以下の2つについて
RewriteEngine on
RewriteRule
の後にどのように書くのか押してください。

(1)
http://www.aaa.com/xxx/yyy/zzz/abc.php?aid=123

http://www.aaa.com/a123/
でアクセスできるようにしたい
(最後の/はあっても無くてもいいです)
(2)
http://www.aaa.com/xxx/yyy/zzz/abc.php?aid=123&bid=456

http://www.aaa.com/a123/b456/
でアクセスできるようにしたい
(最後の/はあっても無くてもいいです)

また、今後、更に後ろに、cid、didが増えていった場合についてもどのように書くのか教えてください。クエリ部分の順番が変わっても大丈夫ないように書くこともできるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/05/15 15:39:25
  • 終了:2007/05/15 22:39:35

回答(1件)

id:nyagao No.1

nyagao回答回数13ベストアンサー獲得回数12007/05/15 22:16:14

ポイント60pt

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html

この内容の最後のほうに従えば、(1)は

RewriteRule ^/a([0-9]+)/$ /xxx/yyy/zzz/abc.php?aid=$1 [L]

(2)とそれ以降は

RewriteRule ^/a([0-9]+)/b([0-9]+)/$ /xxx/yyy/zzz/abc.php?aid=$1&bid=$2 [L]

とか

RewriteRule ^/a([0-9]+)/b([0-9]+)/c([0-9]+)/$ /xxx/yyy/zzz/abc.php?aid=$1&bid=$2&cid=$3 [L]

とかすればよさそうです。

上の例では、aid=~~ の「~~」を数字の列と仮定しているので、[0-9]+ という表現にしてます。もしアルファベットも許すなら [0-9a-zA-Z]+ などにする必要があります。こうすると、/aABC0d21ef/ で aid=ABC0d21ef が渡ることになるはずです。

順番が変わっても対応できるようにする方法ですが、たとえばこんな方法があるでしょうか。3つの id をパスの形で指定するのなら、

RewriteRule ^/([a-z])([0-9]+)/([a-z])([0-9]+)/([a-z])([0-9]+)/$ /xxx/yyy/zzz/abc.php?$1id=$2&$3id=$4&$5id=$6 [L]

とすると、/d123/q99989/a4543/ が /xxx/yyy/zzz/abc.php?did=123&qid=99989&aid=4543 に変わることになります。

ただし、この例では必ず /d123/q99989/a4543/ のように3段必要です。/d123/q99989/ や /d123/ にもマッチさせたいなら、そのための RewriteRule を別に書く必要があります。

正規表現については、

http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%B...

が参考になると思います。

id:dingding

とても詳しい説明ありがとうございます。

正規表現がどうも苦手で困ってました。

2007/05/15 22:39:25
  • id:tezcello
    自宅の Mac で .htaccess と mod_rewrite が使える様にするのに手間取っているうちに終了してしまいましたが、せっかく検証したのでこちらへ書いておきます。

    RewriteRule ^([a-z])([0-9]+)/([a-z])?([0-9]+)?/?([a-z])?([0-9]+)?/?([a-z])?([0-9]+)?/?$ test.php?$1=$2&$3=$4&$5=$6&$7=$8

    で実現可能なようです。(Apache 1.3.33で確認)
  • id:dingding
    環境の準備までしての検証までしていただき、本当にありがとうございます。

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

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

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

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