Php Apache重写规则url参数

Php Apache重写规则url参数,php,mod-rewrite,url-rewriting,Php,Mod Rewrite,Url Rewriting,我试图捕获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

我试图捕获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。如何捕获所有这些内容?

将您的重写规则更改为:

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

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

您可以尝试不同的方法,捕获来自
$\u服务器['REQUEST\u URI']
的请求,并根据需要有条件地捕获
$\u GET
参数

使用此mod_重写代码段可实现以下目标:

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]
只需发送一个简单的请求,如:

并回显
$\u服务器['REQUEST\u URI']
变量:

die($_SERVER['REQUEST_URI']); // outputs: "/mydirectory/test/123"
通过这种方式,您可以为您的请求创建一个简单的PHP路由器