我正在努力与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]