.htaccess文件url重写不断进入错误的页面

时间:2011-12-08 19:00:22

标签: .htaccess mod-rewrite

我想让关注网址正常工作

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的链接时,它会转到另一页?

有人可以帮助我吗

由于

2 个答案:

答案 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