2011-12-08 53 views
0

我試圖讓跟蹤的網址工作.htaccess文件URL重寫不斷去到錯誤頁面

www.urlname.com/team/1-Test

www.urlname.com/team/1-測試/成員

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 

但是當我嘗試鏈接與/成員初始化它去到另一個頁面?

有人可以幫我請

感謝

回答

2

[^-][^&]包括/因此/成員包括在內。您可以將/添加到您的否定字符組中,例如[^-/][^&/],因此它與/不匹配,或者將底部的一個向上移動並在告訴Apache之後添加[L]這是檢查它是否匹配的[L] ast規則。

+0

謝謝你一個:) – Rickstar

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