WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:RewriteRuleでの引数取得について

0:[投稿] am [2006/05/21 03:09 ] [環境:IE7,XP Linux,Apache,PHP]

久々に投稿させていただきます。

下記2種類のURLにおいて、C%2B%2Bを引数に指定した場合、
上のURLでは、"C++"と表示されるのですが、
下のURLでは、"C  "というようにプラス記号が半角スペースに
置き換わってしまいます。
どうすれば、同じ値が取得できるでしょうか?

http://hoge.com/index.php?test=C%2B%2B
http://hoge.com/C%2B%2B/


ファイルの内容です。
■.htaccess
RewriteEngine On
RewriteRule ^(.+)/$ index.php?cat=$1 [L]

■index.php
<?php
echo $_REQUEST["test"];
?>

宜しくお願いします。


1:[回答] / [2006/05/21 11:16 ]

http://hoge.com/

実際に存在するんだよ。
他所様のURLを勝手に使うんじゃない!


2:[回答] m035 [2006/05/21 11:24 ][URL]

>>1
ごもっともです。
以前、私もhoge.comを使ったときに実在することに気がついたので、
それからは
http://hoge.co.jp/
を使っています。
こういった例として存在しないURLを使うときには一度、チェックした方がいいでしょう。


3:[回答] am [2006/05/21 12:42 ]

大変失礼しました。
確かにURLチェックを事前に行うべきでした。
調べたところ、comドメインのルールは3文字以上ということなので、
今後はo.comとかを利用しようと思います。


4:[回答] かんな [2006/05/21 14:05 ][URL]

PHPの文法はよく知らないので、PerlでQUERY_STRINGを表示させてみたところ、上記のURLはtest=C%2B%2Bで下記の方はcat=C++でした。

RewriteRuleのNEフラグの説明を読むと、URLエンコードをデコードするのが標準の動作みたいです。RewriteMapディレクティブを使えば書き換えもできますが、.htaccessでは無理ですね。

RewriteCondの後方参照を使うとか、環境変数を書き換えてみるとか、いろいろ試してみましたが、どれも上手くいきませんでした。

こういう仕様だと思って、PHPの方でフレキシブルに対応するのがよいのではないでしょうか?もしくはURLエンコードが必要なリクエストは書き換えないとか……。


5:[完了] am [2006/05/21 19:43 ]

すいません記述ミスがありました。
(訂正)RewriteRule ^(.+)/$ index.php?test=$1 [L]

かんなさん、素晴らしいヒントありがとうございました!
↓この方法で取得することができました。
echo rawurldecode($_SERVER['QUERY_STRING']);

ただし、test=C++の形式で取得できるので引数のみを抜き出す
加工は必要みたいです。
色々と検証までして下さって感謝しております。
ありがとうございました。



6:[完了] B-Cus [2006/05/22 10:49 ]

> 調べたところ、comドメインのルールは3文字以上ということなので、
1文字ドメインは存在しますし、1文字ドメインの開放を検討という話も
最近ありました。
 http://www.nishishi.com/blog/2005/12/one_char_domain.html

なので、あらかじめ予約してある example.com などを使いましょう。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]