htaccess объединяет правила - PullRequest
2 голосов
/ 13 июля 2011

У меня есть 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/

Isможно объединить 2, зная, что второй аргумент, который является номером страницы, является необязательным, поскольку он используется для нумерации страниц?

Так что «pg» будет (1|$2) (pg = 1 или pg = the-страница номер)

1 Ответ

2 голосов
/ 13 июля 2011

"Таким образом," pg "будет (1 | $ 2) (pg = 1 или pg = номер страницы)"

К сожалению, это не работает так. Лучшее, что вы можете сделать, это использовать это правило:

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;
...