Назад | Перейти на главную страницу

Apache RewriteRule со строкой запроса

У меня переписали вот так:

RewriteRule /products.php?id=123&t=12345 /product/New-Product-Name

Если я включу RewriteLogging и повышаю уровень, я получаю следующее:

applying pattern '/products.php?id=123&t=12345' to uri '/products.php'

Почему не просматривается полный uri (включая строку запроса)?

Из mod_rewrite документы:

Примечание: строка запроса

В Шаблон не будет сопоставляться со строкой запроса. Вместо этого вы должны использовать RewriteCond с %{QUERY_STRING} переменная. Однако вы можете создать URL-адреса в строке подстановки, содержащей часть строки запроса. Просто используйте вопросительный знак внутри строки подстановки, чтобы указать, что следующий текст должен быть повторно вставлен в строку запроса. Если вы хотите стереть существующую строку запроса, завершите строку подстановки только вопросительным знаком. Чтобы объединить новую строку запроса со старой, используйте [QSA] флаг.

Короче говоря, вам нужно будет использовать комбинацию RewriteCond и RewriteRule; может быть что-то вроде:

RewriteCond %{QUERY_STRING} ^id=123&t=12345$
RewriteRule /products.php /product/New-Product-Name

Обновить: Я тестировал это, и он работает, как я описал. Он перенаправляет на
/product/New-Product-Name?id=123&t=12345.

Если вам нужна строка запроса ?id=123&t=12345 для удаления добавьте ? к RewriteRule, лайк:

RewriteRule /products.php /product/New-Product-Name?

который будет перенаправлен на
/product/New-Product-Name

Я думаю, что есть лучший способ сделать это, используя RewriteMap, но это может быть одноразовым.