2013-03-09 75 views
0

我想捕获在url中发送的所有参数并将其重定向传递给一个php文件。下面是我重写规则Apache重写规则url参数

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

虽然时有没有空格在此URL中正常工作的情况下:

GET /locations/example HTTP/1.0 

的$ _GET [“名”]在listone.php将包含例如,但当我送

GET /locations/ex1 ex2 
GET /locations/ex%20ex2 
GET /locations/ex1+ex2 

在listone.php我给了以下内容:

$name = $_GET['name']; 
echo $name; 
$name = str_replace("+", " ", $name); 

我会得到ex1。我如何捕获所有这些?

回答

1

你重写规则改成这样:

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

你是不匹配任何字符像空白,%+

0

如果需要,您可以尝试不同的方法,并从$_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路由器