Apache mod_rewrite,多个变量

Apache mod_rewrite,多个变量

我对 mod_rewrite 和用正则表达式替换多个变量有点困惑。我试图重写以下内容:

www.mysite.com/avatars/funny/1

进入:

www.mysite.com/avatars.php?genre=funny&page=1

目前,我有以下内容,但这并没有真正起到作用:

RewriteRule ^/avatars/?(.*)/?(.*)$ /avatars.php?genre=$1&page=$2

答案1

操作员*很贪婪。这意味着它会抓取尽可能多的东西。

在您的示例中,第一个(.*)块将匹配/funny/1。第二个块将不匹配任何内容,但没关系,因为*它匹配“零个或多个”前一个字符。

使用不同的块来匹配斜线之间的部分即可。如下所示:

RewriteRule ^/avatars/([a-z]*)/([0-9]*)$ /avatars.php?genre=$1&page=$2

或这个:

RewriteRule ^/avatars/([^/]+)/([^/]+)$ /avatars.php?genre=$1&page=$2

斜杠后面也不需要运算符?,因为为了有两个变量,必须有斜杠。


Apache 还有不情愿的与贪婪运算符相反的运算符。你可以在通常的贪婪运算符后添加问号来使用这些运算符。如下所示:

RewriteRule ^/avatars/(.*?)/(.*?)$ /avatars.php?genre=$1&page=$2

答案2

您不需要,?因为斜线不是可选的。但是,一旦应用此规则,您可能需要停止处理([L])。您可以尝试以下操作吗?

RewriteRule ^/avatars/(.*)/(.*)$ /avatars.php?genre=$1&page=$2 [L]

答案3

我认为您使用的 /? 有问题,请尝试以下操作:

RewriteEngine on
RewriteRule ^avatars/([^/]+)/([^/]+)$ avatars.php?genre=$1&page=$2 [L]

相关内容