允许使用Rewrite Cond的可选变量

时间:2010-06-18 11:47:54

标签: php .htaccess mod-rewrite

我目前有以下代码:

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。

我做错了什么?

非常感谢。

1 个答案:

答案 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开始从左到右编号。