我想让关注网址正常工作
www.urlname.com/team/1-Test
www.urlname.com/team/1-Test/members
RewriteRule ^team/([^-]+)-([^&]+)$ index.php?p=teamprofile&team_name=$2&team_id=$1
RewriteRule ^team/([^-]+)-([^&]+)/members$ index.php?p=teammembers&team_name=$1&team_id=$2
但是当我尝试与/ members init的链接时,它会转到另一页?
有人可以帮助我吗
由于
答案 0 :(得分:2)
[^-]
和[^&]
包含/
所以/成员包含在内。您可以将/
添加到您的否定字符组中,例如[^-/]
和[^&/]
,以使其与/
不匹配,或者将最后一个向上移动并添加[L]
在告诉apache之后,这是检查它是否匹配的[L] ast规则。
答案 1 :(得分:0)
麻烦的是,第一条规则满足了你的第二条规则。你可以简单地切换它们,它会起作用:
RewriteEngine On
RewriteRule ^team/([^-]+)-([^&]+)/members$ index.php?p=teammembers&team_name=$1&team_id=$2
RewriteRule ^team/([^-]+)-([^&]+)$ index.php?p=teamprofile&team_name=$2&team_id=$1
虽然第一条规则的细微变化也会解决问题:
RewriteEngine On
RewriteRule ^team/([^-]+)-([^/]+)[/]?$ index.php?p=teamprofile&team_name=$1&team_id=$2 [L]
RewriteRule ^team/([^-]+)-([^/]+)/members[/]?$ index.php?p=teammembers&team_name=$1&team_id=$2 [L]
注意,我将第一条规则中的匹配字符串从([^&]+)
更改为([^/]+)
- 这样,在mydomain.com/team/1-2/
等情况下,正斜杠不会包含在匹配项中。最后的[/]?
规则是该正斜杠的可选匹配项。我也在成员规则的末尾添加了一个,现在它的工作原理如下:
mydomain.com/team/1-2/
- 转到index.php?p=teamprofile&team_name=1&team_id=2
mydomain.com/team/1-2
- 转到index.php?p=teamprofile&team_name=1&team_id=2
mydomain.com/team/1-2/members
- 转到index.php?p=teammembers&team_name=1&team_id=2
mydomain.com/team/1-2/members/
- 转到index.php?p=teammembers&team_name=1&team_id=2