2013-11-28 82 views
2

我想通過.htaccess在某個URL上應用RewriteRule,並且遇到了問題。加號和.htaccess中的百分號mod_rewrite

下面是代碼,我以前還爲這個具體用法:

RewriteRule ^levels-u-([a-z0-9_-]+)\.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC] 
RewriteRule ^levels-u-([a-z0-9_-]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC] 

這種工作方式是,有可能是這個頁面:

水平-U-username.html

或本頁:

levels-u-username-(text).html

但是用戶名文本可以包含空格和括號(顯示爲+,%5B和%5D)。

所以我用這個代碼字符

RewriteRule ^levels-u-([^/]+)\.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC] 
RewriteRule ^levels-u-([^/]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC] 

的任意組合現在匹配,這樣,這不會輸出404錯誤:

水平-U-用戶名+%5Bmore%5D.html(這是 「用戶名[詳細]」)

但現在的問題是,後者

水平-U-用戶名 - (文本)的.html

將改寫「用戶名 - (刪除)」中的第一個重寫規則爲$ 1,而不是在第二個有1 $ =「用戶名」和$ 2 =「文本」

什麼,我想弄清楚,是如何把加號和支架到這個正則表達式的.htaccess mod_rewrite的:

([a-z0-9_-]+) 

因爲

([^/]+) 

創建另一個重寫規則衝突。

再次,這些我需要加入到表達中的字符:

「+」, 「%5B」(這是 「[」), 「%5D」(這是 「]」)

另一種認爲我有被禁用語「 - (」如果可能的話

+1

打開重寫日誌可以幫助你找到是怎麼回事爲什麼... –

回答

0

只是爲了支持這些額外的字符,你可以使用:

RewriteRule ^levels-u-([\[\]+\w]+)\.html$ index.php?p=$1&i=u&r=true [QSA,L,NE] 

RewriteRule ^levels-u-([\[\]+\w]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NE]