htaccess结合规则

时间:2011-07-13 10:42:49

标签: php apache .htaccess mod-rewrite url-rewriting

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

1 个答案:

答案 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;