如何在Mod Rewrite-Syntax中设置可选参数?

时间:2009-12-22 22:05:35

标签: mod-rewrite

我是德国人,我很抱歉我该死的吸吮英语。

RewriteRule ^admin/(.*)$ index.php?admin=$1 

这是一个例子。 所以我想要的结果是例如内部的id,但作为可选参数:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2

这里的id不一定要设置我想要的东西:)

链接示例(我希望这是相同的结果):

www.exmple.com/admin/edit-user
www.exmple.com/admin/edit-user/id-1

问题是:规则在任何时候都是第一种方式,只有这个:

RewriteRule ^admin/(.*)$ index.php?admin=$1 

任何人都可以帮助我吗? :)

爱你的问候m0。

4 个答案:

答案 0 :(得分:3)

尝试更改规则的顺序,不要忘记最后的[L]标志:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2 [L]

RewriteRule ^admin/(.*)$ index.php?admin=$1 [L]

答案 1 :(得分:2)

尝试使用可选的捕获组:

RewriteRule ^admin/([^/]*)(/id-(.*))?$ index.php?admin=$1&id=$3

如果没有指定ID,那么$ 3将为空,您只需重写一个空白ID:

index.php?admin=edit_user&id=

如果指定了,那么你也会获得id:

index.php?admin=edit_user&id=1

答案 2 :(得分:1)

表达式.*过于笼统,因为它匹配任意长度的任意字符。一个更好的表达式是[^/]+,它只匹配除/之外的一个或多个任意字符(路径段分隔符)。

请尝试以下规则:

RewriteRule ^admin/([^/]+)$ index.php?admin=$1
RewriteRule ^admin/([^/]+)/id-([^/]+)$ index.php?admin=$1&id=$2

对于第二条规则,您还可以将第二个[^/]+替换为仅匹配大于0的整数的[1-9][0-9]*

RewriteRule ^admin/([^/]+)/id-([1-9][0-9]*)$ index.php?admin=$1&id=$2

答案 3 :(得分:0)

试试这个:

RewriteRule /admin/([^/]*)/?(id-(.*))?$ index.php?admin=$1&id=$3