- - PR -
apacheのrewrite機能について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-03-05 21:47
大変お手数おかけしますが、どなたかアドバイスよろしくお願いいたします。
下記の(ア)のURLを(イ)のように変換したいと思い httpd.confの <Directory>タグにRewriteRuleで以下のように記載してみましたが、 下記に記した「●結果」のように期待しない変換がされてしまいます。 どのようにRewriteRuleを指定すればよいでしょうか? どなたかアドバイスよろしくお願いいたします。 ------------ httpd.conf --------------- <Directory "/var/www/html/"> Options ExecCgi SymLinksIfOwnerMatch AllowOverride None RewriteEngine On RewriteBase / RewriteRule ^mem([^/]*)/(.*).php(.*)$ $2.php$3&c-key=$1 [L] </Directory> --------------------------------------- 【 Rewrite前 】 http://www.aaa.co.jp/mem1/test.php?a-key=2&b-key=3 ・・・(ア) 【 Rewrite後 】=期待する変換= http://www.aaa.co.jp/test.php?a-key=2&b-key=3&c-key=1 ・・・(イ) ※mem1ディレクトリ→c-key=1 ●結果 http://www.aaa.co.jp/test.php&c-key=1 上記のように変換されます 「?a-key=2&b-key=3」の部分が完全にトンでしまっています。 ------------------------------ そこで原因を検証するため、以下の2つのRewriteRule でどのような変換がされるか検証 しましたが、両方とも正常に動作します。両方を組み合わせると冒頭の結果のように うまくいきません。 --------------------------------------- RewriteRule ^mem([^/]*)/(.*).php$ $2.php?c-key=$1 [L] --------------------------------------- ●結果 【 Rewrite前 】 (ア)の式 【 Rewrite後 】 http://www.aaa.co.jp/test.php&c-key=1 正常に変換 --------------------------------------- RewriteRule ^mem([^/]*)/(.*).php(.*)$ $2.php$3 [L] --------------------------------------- ●結果 【 Rewrite前 】 (ア)の式 【 Rewrite後 】 http://www.aaa.co.jp/test.php?a-key=2&b-key=3 正常に変換 大変お手数おかけしますが、どなたかアドバイスよろしくお願いいたします。 [ メッセージ編集済み 編集者: kumar 編集日時 2007-03-05 22:01 ] [ メッセージ編集済み 編集者: kumar 編集日時 2007-03-05 22:06 ] |
|
投稿日時: 2007-03-06 02:00
こんばんは。
URLの ? 以降は、QueryString として特別扱いされてますから、RewriteRule の中で QueryString にパラメータ追加、ということであれば、QSA(query string append)フラグを使うことになるかと思います。 |
|
投稿日時: 2007-03-06 08:39
早速のご返答ありがとうございます。
今晩早速試してみます! 結果はご報告させていただきます。m(_ _)m |
|
投稿日時: 2007-03-06 21:06
アドバイスいただきました方法でうまくいきました。
angelさん大変ありがとうございました。 RewriteRule ^mem([^/]*)/(.*)$ $2?c-key=$1 [qsa,L] 上記の記載でa-key,b-key,c-keyの全ての変数が認識されました。 |
1