- PR -

apacheのrewrite機能について

1
投稿者投稿内容
kumar
会議室デビュー日: 2007/03/05
投稿数: 3
投稿日時: 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 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-03-06 02:00
こんばんは。
URLの ? 以降は、QueryString として特別扱いされてますから、RewriteRule の中で QueryString にパラメータ追加、ということであれば、QSA(query string append)フラグを使うことになるかと思います。
kumar
会議室デビュー日: 2007/03/05
投稿数: 3
投稿日時: 2007-03-06 08:39
早速のご返答ありがとうございます。

今晩早速試してみます!

結果はご報告させていただきます。m(_ _)m

kumar
会議室デビュー日: 2007/03/05
投稿数: 3
投稿日時: 2007-03-06 21:06
アドバイスいただきました方法でうまくいきました。
angelさん大変ありがとうございました。

RewriteRule ^mem([^/]*)/(.*)$ $2?c-key=$1 [qsa,L]

上記の記載でa-key,b-key,c-keyの全ての変数が認識されました。

1

スキルアップ/キャリアアップ(JOB@IT)