我的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]
即使第二个参数不存在,我怎样才能使它工作?
答案 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]
另外,我注意到你的例子中没有向前斜杠/
,所以我把它从正则表达式中删除了。