2016-09-16 44 views
0
<Directory /var/www/html/api/> 
     RewriteEngine on 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^([^/]*)(.*)$ index.php?version=$1&method=$2&param1=$3&param2=$4&param3=$5 
</Directory> 

以下网址:http://myserver.com/api/v1/hello/there/stranger阿帕奇重写规则不拆分变量进入查询字符串

array(5) { ["version"]=> string(2) "v1" ["method"]=> string(21) "/hello/there/stranger" ["param1"]=> string(0) "" ["param2"]=> string(0) "" ["param3"]=> string(0) "" } 

版本字符串分割正确,但该方法的字符串似乎采取的其余内容,并把它变成一个字符串而不是将它分成param1,param2和param3这是我的目标。

如何“重写”RewriteRule,以便它将这些变量正确地分割为匹配的查询字符串?

回答

1

这不是分裂,因为你的正则表达式并没有把它分成多个组。

您的正则表达式正在捕获(.*)v1/它将只捕获/hello/there/stranger在一个组中。

您可以使用这些不同的规则:

# 2 parts 
RewriteRule ^([^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2 [L,QSA] 

# 3 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3 [L,QSA] 

# 4 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3&param2=$4 [L,QSA] 

# 5 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3&param2=$4&param3=$54 [L,QSA] 
+0

这似乎已经打破了原有的重写规则是将请求路由到index.php。任何想法为什么? – jskidd3

+0

当URL中没有提供足够的参数时,问题似乎就会发生。请你可以改变你的答案,以便你不必提供所有的参数,以便index.php路线工作? – jskidd3

+0

它可以完成,但是当所有参数都不存在时,我将需要所有情况下的示例URL。 – anubhava