我有2个htaccess重写规则:
RewriteRule ^tag/([^/.]+)/?$ index.php?p=tag&tag=$1&pg=1 [L]
RewriteRule ^tag/([^/.]+)/([0-9]+)/?$ index.php?p=tag&tag=$1&pg=$2 [L]
的例子:
1- mysite.ext/tag/php/
2- mysite.ext/tag/php/13/
是否有可能组合这两个,知道第二个参数是页码是可选的,因为它是分页?
那么"pg"将是(1|$2)
(pg=1或pg=the-page-number)
"那么"pg"将是(1|$2)(pg=1 or pg=the-page-number)"
不幸的是,它不是这样工作的。你能做的最好的事情就是使用这个规则:
RewriteRule ^tag/([^/.]+)/?(d+)?/?$ index.php?p=tag&tag=$1&pg=$2 [QSA,NC,L]
如果mysite.ext/tag/php/
被请求,那么它被重写为index.php?p=tag&tag=php&pg=
。pg
参数为空(如您所见)。你需要做的是在index.php
中添加额外的代码位来检查pg
是否为空,然后分配1
的值:
$page_number = isset($_GET['pg']) ? $_GET['pg'] : '';
if (empty($page_number)) {
$page_number = 1;
}
else {
// convert it to INT type
$page_number = (int)$page_number;
}
上面的代码可能看起来太多了(太安全的方法),但这就是我喜欢做的(当做电子商务网站时,安全性是第一优先级)。(我跳过了完整的验证以使其更短)
但是如果你愿意,你可以把它写得更小(你仍然需要验证输入的数据):
$page_number = isset($_GET['pg']) ? $_GET['pg'] : '';
if (empty($page_number)) $page_number = 1;