我是德国人,我很抱歉我该死的吸吮英语。
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。答案 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