RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
Поскольку RewriteRule просматривает только путь (до, но не включая вопросительный знак), используйте RewriteCond для захвата значений в строке запроса.
Обратите внимание, что совпадения с RewriteCond
фиксируются в %1
,
%2
и т. Д., А не $1
, $2
и т. Д.
Также обратите внимание на ?
в конце RewriteRule
. Это говорит mod_rewrite
не добавлять исходную строку запроса к новому URL, поэтому вы получите
/DesignPatterns/151
целое число
/DesignPatterns/151?book=DesignPatterns&page=151
.
Флаги [L,R=301]
делают две вещи:
L
гарантирует, что никакие другие правила, которые могут в противном случае соответствовать, не будут обработаны (другими словами, это гарантирует, что это "последнее" обработанное правило).
R=301
заставляет сервер отправить ответ перенаправления.
Вместо того, чтобы переписать, он говорит клиенту попробовать еще раз с новым
URL. =301
делает это постоянным перенаправлением , так что, помимо прочего, поисковые системы будут знать, чтобы заменить старый URL на новый URL в своих индексах.