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 回答