У меня переписали вот так:
RewriteRule /products.php?id=123&t=12345 /product/New-Product-Name
Если я включу RewriteLog
ging и повышаю уровень, я получаю следующее:
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
, но это может быть одноразовым.