0

URLで送信されたすべてのパラメーターをキャプチャし、リダイレクトしてphpファイルに渡しようとしています。これが私の書き換えルールです

RewriteCond %{REQUEST_METHOD} ^GET
RewriteRule ^/locations/(\w+\d*)+ /php/listone.php?name=$1 [L]

URLに空白がない場合、これは正しく機能しますが:

GET /locations/example HTTP/1.0

listone.php の $_GET['name'] には例が含まれますが、送信すると

GET /locations/ex1 ex2
GET /locations/ex%20ex2
GET /locations/ex1+ex2 

listone.php で、次のように指定しました。

 $name = $_GET['name'];
 echo $name;
 $name = str_replace("+", " ", $name);

私はex1だけを取得します。それらすべてをキャプチャするにはどうすればよいですか?

4

2 に答える 2

1

RewriteRule を次のように変更します。

 RewriteRule ^/locations/(.+) /php/listone.php?name=$1 [L]

空白%+.

于 2013-03-09T07:49:57.567 に答える
0

必要に応じて、別のアプローチを試して、 からのリクエストをキャッチし$_SERVER['REQUEST_URI']、条件付きで$_GETパラメーターをキャッチすることもできます。

これを実現するには、この mod_rewrite スニペットを使用します。

Options +FollowSymLinks
IndexIgnore */*

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /mydirectory/index.php [NC,L]

次のような簡単なリクエストを送信するだけです。

http://hostname.com/mydirectory/test/123

そして$_SERVER['REQUEST_URI']変数をエコーし​​ます:

die($_SERVER['REQUEST_URI']); // outputs: "/mydirectory/test/123"

このようにして、リクエスト用の単純な PHP ルーターを作成できます。

于 2013-03-09T07:52:28.183 に答える