Mod重写有两个参数忽略最后

时间:2015-03-13 00:22:32

标签: apache .htaccess mod-rewrite

我的htaccess中有这个。

RewriteRule ^author/([A-Za-z0-9-]+)/([0-9]+)/?$ author.php?authorslug=$1&page=$2 [NC,L]

对于我的网址,仅当两个参数都存在时才有效

example.com/author/name-x/1

但如果第二个不存在

example.com/author/name-x

它会抛出404。

这也是我的htaccess的一部分。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ /$1.php [L]

即使第二个参数不存在,我怎样才能使它工作?

1 个答案:

答案 0 :(得分:0)

在括号中将您希望成为可选项的所有内容分组,然后是问号:

RewriteRule ^author/([A-Za-z0-9-]+)(/([0-9]+))?$ author.php?authorslug=$1&page=$3 [NC,L]

现在有3组括号,你将拥有3个捕获组和变量。我们的"使可选" group在括号序列中出现第二个,因此它填充$2捕获变量。你想要捕获的实际价值排在第三位,所以它是$3

你所拥有的仅仅是使用尾随斜杠可选/?

更短的时间:

RewriteRule ^author/([^/]+)(/([0-9]+))?$ author.php?authorslug=$1&page=$3 [NC,L]

另外,我注意到你的例子中没有向前斜杠/,所以我把它从正则表达式中删除了。