我正在尝试捕获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。我怎样才能捕获所有这些?
答案 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]
只需发送一个简单的请求,例如:
并回显$_SERVER['REQUEST_URI']
变量:
die($_SERVER['REQUEST_URI']); // outputs: "/mydirectory/test/123"
通过这种方式,您可以为请求创建一个简单的PHP路由器