0

这是我网站的个人资料页面的 htaccess 规则:

RewriteRule ^users/([0-9]+)/?(.+)?/?(.+)? profile.php?id=$1&slug=$2&tab=$3&%{QUERY_STRING}

当您单击用户个人资料上的选项卡时,例如收藏夹

/users/83028/nathan-johnson/favorites

根据a $_GET,名称为slug的变量正在接收nathan-johnson/favorites而不是 justnathan-johnson并且tab变量为空白var_dump

array(3) { 
      ["id"]=> string(5) "83028" 
      ["slug"]=> string(24) "nathan-johnson/favorites" 
      ["tab"]=> string(0) "" }

看起来问题出在我的 htaccess 正则表达式(上),但我没有看到它的问题。

提前致谢。

4

1 回答 1

0

因为您的正斜杠是可选的(通过/?),所以(.+)分组是贪婪的,并且会将它们全部吞噬。您需要通过添加? : (.+?)

(.+)?此外,您应该只使用 a来代替,*这意味着没有、一个或多个。

尝试:

RewriteRule ^users/([0-9]+)/?([^/]*)/?(.*?)?$ profile.php?id=$1&slug=$2&tab=$3&%{QUERY_STRING}

%{QUERY_STRING}此外,您可以只使用QSA标志而不是 using :

RewriteRule ^users/([0-9]+)/?([^/]*)/?(.*?)?$ profile.php?id=$1&slug=$2&tab=$3 [L,QSA]
于 2012-10-24T22:25:25.070 回答