RewriteCond %{QUERY_STRING} (^|&)ID=(\d+)(&|$) [NC]
RewriteRule ^content\.aspx$ /product/item/%2? [R=301,L]
Несколько комментариев ...
Нет необходимости добавлять .*
, чтобы соответствовать всей строке в этом случае. Пока вы можете точно определить, что вы хотите соответствовать, вы будете в порядке. (^|&)
соответствует либо началу строки, либо &, тогда как (&|$)
соответствует либо концу строки, либо &. Это позволяет id = xxx находиться где угодно в строке запроса, что является хорошей практикой. \d
соответствует одной цифре, тогда как +
является оператором повторения для "одного или более".
Кроме того, вам на самом деле не нужно включать доменное имя, если итоговая страница находится в том же домене. Просто начните полученную строку с /
, чтобы сделать ее относительно корневого уровня.
%2
означает, что вы вставляете субматч из оператора RewriteCond
, а не RewriteRule
. Последний может быть $1
, $2
, как вы, возможно, знаете.
Трейлинг? говорит механизму перезаписи не добавлять строку запроса в URL. (Не волнуйтесь, вопросительный знак не будет отображаться в URL перенаправления)