我试图捕获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路由器