переписать секунду, переписать и игнорировать дополнительные строки запроса - PullRequest
0 голосов
/ 08 марта 2011

У меня есть старый URL:

www.example.com/content.aspx?ID=227&ParentID=33&MicrositeID=0&Page=1

которую я хочу переписать:

www.example.com/product/item

Единственный важный бит - ID = 227, все, что после этого может быть удалено и не требуется для перенаправления. Мне нужно не передавать какие-либо строки запросов по новому адресу, это в основном трудная перезапись с одного адреса на другой.

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

RewriteCond %{QUERY_STRING} ^ID=227(.*)$ [NC] 
RewriteRule ^content\.aspx$ http://www.example.com/product/item [R=301,L]

Но поскольку я абсолютный новичок в mod_rewrite, я борюсь - могут ли какие-нибудь гуру htaccess помочь мне?

1 Ответ

0 голосов
/ 08 марта 2011
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 перенаправления)

...