.htaccess HTACCESS重写规则将查询参数合并到第一个参数

.htaccess HTACCESS重写规则将查询参数合并到第一个参数,.htaccess,.htaccess,我正在努力使$\u get参数位于它们各自的键下 我有以下访问规则: RewriteRule ^view/new/(.*)/?(.*)/?(.*)/?(.*)$ vehicles/new-details.php?man=$1&model=$2&trim=$3&engine=$4 [QSA] 访问此页面时,我临时打印出$\u GET数组: print_r($_GET); 这将返回: 阵列([man]=>BMW/3系列/SEL/EVO-3.0-TFSI[车型]=>[tri

我正在努力使$\u get参数位于它们各自的键下

我有以下访问规则:

RewriteRule ^view/new/(.*)/?(.*)/?(.*)/?(.*)$ vehicles/new-details.php?man=$1&model=$2&trim=$3&engine=$4 [QSA]
访问此页面时,我临时打印出$\u GET数组:

print_r($_GET);
这将返回:

阵列([man]=>BMW/3系列/SEL/EVO-3.0-TFSI[车型]=>[trim]=>
[引擎]=>)

鉴于其应返回:

Array([man]=>BMW[model]=>3系[trim]=>SEL[engine]=>EVO-3.0-TFSI)

man参数是必需的,而所有其他参数都是可选的

不知道这里发生了什么。可能是因为我在重写规则中设置了可选参数吗

(.*)
将接收每个捕获组中的所有字符,您希望将其限定为接收
/
之前的所有字符

因此,将
(.*)
替换为
([^/]*)
,这会告诉mod_rewrite“在遇到
/
之前接受任何字符”

这会给你你期望的结果


编辑:一个更完整的答案

你能举几个源URI和目标URI的例子吗?
RewriteRule ^view/new/(.*)/?(.*)/?(.*)/?(.*)$ vehicles/new-details.php?man=$1&model=$2&trim=$3&engine=$4 [QSA]
RewriteRule ^view/new/([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)$ vehicles/new-details.php?man=$1&model=$2&trim=$3&engine=$4 [QSA]