我目前有以下代码:
RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+) index.php?method=$1&value=$2 [NC,L]
这非常适合将'page / home'重定向到'index.php?method = page& value = home。但是在某些时候我需要在查询字符串中添加一个或两个额外的变量,例如'admin / useraccounts / mod / 2'。如果所有变量都是'page / home / rand / rand'或'admin / useraccounts / mod / 2',那么当我简单地将位写入重写规则的末尾时,它会起作用,但是如果遗漏任何内容,例如'page /回家'我得到了404。
我做错了什么?
非常感谢。
答案 0 :(得分:0)
这应该有效:
RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(?:/([a-z|0-9_&;=-]+))?(?:/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$3&opt2=$4 [NC,L]
(?:)是非捕获组和?在它使它成为可选之后。
我不确定非捕获组是否在mod_rewrite中工作,如果不使用普通组,请在提取值时注意在$之后使用正确的数字。像这里:
RewriteCond %{REQUEST_URI} !assets/
RewriteCond %{REQUEST_URI} !uploads/
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(/([a-z|0-9_&;=-]+))?(/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$4&opt2=$6 [NC,L]
组的编号就好像从1开始从左到右编号。