我有 htaccess 重寫規則,允許帳戶昵稱類似于domain.com/its_super-nick.name3000
這是我使用的正則運算式,但它給了我一個內部錯誤
RewriteRule ^([A-Za-z0-9-_.] )/?$ index.php?cl=account&username=$1
難道我做錯了什么?
uj5u.com熱心網友回復:
RewriteRule ^([A-Za-z0-9-_.] )/?$ index.php?cl=account&username=$1
這里的“問題”是正則運算式也匹配index.php(重寫的 URL)。因此,username=index.php將導致第二次通過重寫引擎。(就其本身而言,這不應導致“內部錯誤” - 如果您的意思是“500 內部服務器錯誤” - 但與其他指令結合使用可能會導致重寫回圈,即 500 錯誤)
而且您缺少L( last) 標志。
在這種情況下,將連字符放置在字符類的末尾(如另一個答案中所述)實際上不是問題(它將匹配文字連字符),但是,您應該將其移動到開頭或結尾字符類以避免任何歧義(并提高可讀性)。
請嘗試以下操作:
RewriteRule ^(?!index\.php$)([\w.-] )/?$ index.php?cl=account&username=$1 [L]
這使用負前瞻來避免匹配index.php。
速記字符類\w與[A-Za-z0-9_].
uj5u.com熱心網友回復:
也許是因為9-_您可能想將“A”與“Z”、“a”與“z”、“0”與“9”匹配,然后是字符“-”、“_”和“.”。
在這種情況下,您必須將連字符放在末尾:
RewriteRule ^([A-Za-z0-9_.-] )/?$ index.php?cl=account&username=$1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444981.html
上一篇:正則運算式,檢查位置的子字串
