Обрабатывать запросы $ _GET с чистыми URL-адресами

У меня есть четкая система на основе URL-адресов, поэтому категории будут показаны так:

http://www.mysite.com/category/23/cat-name 

Внутри страницы категорий у меня есть некоторые параметры сортировки и страниц, такие как сортировка по латтестам и более низкая цена. Кроме того, у меня есть система навигации по страницам

Проблема заключается в том, когда запрос происходит внутри страницы, $_GET[] не отображает нужные мне переменные. Однако он отображается в URL как

 http://www.mysite.com/category/23/cat-name?page=3 

Переменная $_GET показывает только идентификатор категории, которая в нашем случае теперь = 23 и игнорирует номер страницы, который находится в URL-адресе.

.htaccess содержание

 RewriteEngine On RewriteRule ^category/([0-9]+)/[az][-a-z0-9]*$ cat.php?id=$1 

Вам нужно включить флаг QSA в конце вашего правила. Это добавляет любую существующую строку запроса к той, которая вы строите в самом правиле:

 RewriteEngine On RewriteRule ^category/([0-9]+)/[az][-a-z0-9]*$ cat.php?id=$1 [L,QSA] 

Таким образом, переписанный URI должен быть: /cat.php?id=23&page=3

Добавьте QSA (добавить строку запроса) в конце вашего правила перезаписи.

 RewriteEngine On RewriteRule ^category/([0-9]+)/[az][-a-z0-9]*$ cat.php?id=$1 [L,QSA] 

Когда URI замещения содержит строку запроса, поведение RewriteRule по умолчанию заключается в том, чтобы отменить существующую строку запроса и заменить ее на вновь созданную. Использование флага [QSA] приводит к объединению строк запроса.

С помощью флага [QSA] запрос / pages / 123? One = two будет отображаться на /page.php?page=123&one=two. Без флага [QSA] этот же запрос будет сопоставлен с /page.php?page=123 – то есть существующая строка запроса будет отброшена.