Для проверки значений в строке запроса вы должны использовать RewriteCond с переменной QUERY_STRING
, как это:
RewriteCond %{QUERY_STRING} ^([a-z]+)&cat=([a-z]+)$
Это говорит о том, что RewriteRule необходимо выполнить, только если строка запроса содержит набор последовательные строчные буквы, сопровождаемые амперсандом, затем «cat =», за которым следует другой набор последовательных букв. Группы захвата могут быть использованы в следующем RewriteRule с использованием %1
и %2
вроде этого:
RewriteRule ^([a-z]+)$ $1.php?id=%1&cat=%2 [L]
Вы не хотите использовать QSA
флаг, потому что добавит недопустимый строку запроса пользователя к концу вашего переписанного URL , Вы можете по-прежнему использовать флаг NC
, чтобы игнорировать регистр в шаблоне соответствия, но, по возможности, лучше всего работать с именами только в нижнем регистре.
Что касается блокировки запросов к финализированному пути (.php), я не могу придумать, как это сделать, потому что даже финализированный URL-адрес должен проходить через правила .htaccess, поэтому запрет доступа к нему приведет к перенаправления.
Спасибо за ответ, это очень помогло мне. –