Apache重写规则url参数

时间:2013-03-09 07:38:47

标签: php mod-rewrite url-rewriting

我正在尝试捕获url中发送的所有参数,并将其重定向传递给php文件。这是我的重写规则

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

虽然在网址中没有空格的情况下这可以正常工作:

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。我怎样才能捕获所有这些?

2 个答案:

答案 0 :(得分:1)

将您的RewriteRule更改为:

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

您不匹配任何字符,例如空格,%+

答案 1 :(得分:0)

如果需要,您可以尝试使用其他apprach,并从$_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路由器