Htaccess组合规则



我有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;

最新更新