我有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/
是否可以组合2,知道作为页码的第二个参数是可选的,因为它是分页?
所以“pg”将是(1|$2)
(pg = 1或pg = the-page-number)
答案 0 :(得分:2)
“所以”pg“将是(1 | $ 2)(pg = 1或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;