RewriteRule ^user/(\w{1,50})\-\-(\w{1,50})\-(\w{1,50})\.html users.php?name=$1 [L]
url看起来像这样
site.com/user/first-middle-last.html
由于某种原因,users.php中的变量$ _GET ['name']只返回第一个名称部分而不是整个第一个中间和最后一个,如何使其处理全名为var var
答案 0 :(得分:3)
你的正则表达式有3个捕获组:
^user/(\w{1,50})-(\w{1,50})-(\w{1,50})\.html
\________/ \________/ \________/
$1 $2 $3
$1
是第一个捕获:(\w{1,50})
的群组。如果您想要整个文本,请尝试:
RewriteRule ^user/(\w{1,50}-\w{1,50}-\w{1,50})\.html users.php?name=$1 [L]
\__________________________/
$1
此外,请注意,您不必在字符集(-
)之外转义破折号([...]
),并且在第一个和第二个单词之间有两个破折号。
如果您需要,您可以两种方式 - 捕获每个单词和整个名称:
^user/((\w{1,50})-(\w{1,50})-(\w{1,50}))\.html
|\________/ \________/ \________/|
| $2 $3 $4 |
\________________________________/
$1
答案 1 :(得分:1)
每个$n
引用一个带括号的组。在这种情况下,$1
代表第一个(\w{1,50})
;其余的被困在$2
和$3
。假设双连字符实际上应该映射到单个连字符(这在您的示例中不明确),您可能想要
RewriteRule ^user/(\w{1,50})\-\-(\w{1,50})\-(\w{1,50})\.html users.php?name=$1-$2-$3 [L]
如果这是一个错误并且您确实希望重写整个first--middle-last
表达式,那么@ Kobi的答案比删除它并重新加入更正确。