Apache mod_rewrite,多个variables

我正在努力与mod_rewrite和replace多个variables与正则expression式。 我试图重写以下内容:

www.mysite.com/avatars/funny/1 

成:

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

现在我有以下,这不是真的诀窍:

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

*运算符是贪婪的。 这意味着它将尽可能地抓住。

在你的例子中,第一个(.*)块将匹配/funny/1 。 第二个不会匹配任何东西,但没关系,因为*匹配前面字符的“零个或多个”。

使用不同的块来匹配斜杠之间的部分将做的伎俩。 像这样的东西:

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

或这个:

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

还有没有必要的? 运算符在斜杠之后,以便有两个variables,斜杠必须在那里。


阿帕奇也不情愿与贪婪的运营商相反的运营商。 您可以通过在正常贪婪的操作符之后添加问号来使用这些问号。 喜欢这个:

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

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

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

我觉得你使用/? 是这个问题,试试这个:

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