Apache重写规则url参数


Apache rewrite rule url parameters

我试图捕获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。我怎样才能捕捉到它们?

把你的rewriterrule改成:

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

您没有匹配任何字符,如空白,%+

您可以尝试不同的方法,捕获来自$_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路由器