2013-03-09 121 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路由器