RewriteRule ^/customer/index.php /knowledgebase/ [R=301,L]
В .htaccess
, URL-путь, соответствующий Правило перезаписи
шаблон (т.е. ^\/клиент\/index.php
) не начинается с косой черты, так что это никогда не совпадет.Совпадающий URL-путь относится к каталог который содержит .htaccess
файл (без префикса косой черты). (В отличие от использования в сервер контексте, когда совпадающий URL-путь является URL-путем относительно корня документа, начинающимся с косой черты.)
Вам также понадобится QSD
флаг на первом правиле для отказаться строка запроса в исходном запросе, в противном случае она передается как есть.
Незначительный момент... нет необходимости экранировать косую черту в регулярном выражении Apache, поскольку пространства являются разделителем аргументов, а косая черта не имеет особого значения в регулярном выражении.
Вместо этого попробуйте следующее:
RewriteEngine включен
RewriteCond %{QUERY_STRING} ^rp=/база знаний/
RewriteRule ^customer/index\.php$ /knowledgebase/ [QSD,R=301,L]
Правило перезаписи ^клиент/база знаний\.php$ /база знаний/ [R=301,L]
Я закрепил строку запроса в условие так что это соответствует рп=...
в начале строки запроса, как в вашем примере. .*
в конце регулярного выражения не требуется.
КСА
флаг не требуется для второго правила, так как строка запроса передается по умолчанию. КСА
флаг потребуется только в том случае, если вам нужно сливаться исходная строка запроса в запросе с новой строкой запроса, которую вы добавляли в замена.
<IfModule>
оболочка не требуется, если только эти директивы не по желанию и предназначен для использования на нескольких серверах, где mod_rewrite может быть недоступен. См. этот вопрос в стеке веб-мастеров: https://webmasters.stackexchange.com/questions/112600/is-checking-for-mod-write-really-necessary
Сначала вы должны протестировать 302 (временную) переадресацию, чтобы избежать потенциальных проблем с кэшированием.
ОБНОВИТЬ: чтобы упростить задачу, я поместил правила перезаписи в .htaccess
файл под /покупатель
вместо /
. Я обновил свой пост соответственно.
В этом случае вам нужно будет удалить покупатель/
префикс для каждого из Правило перезаписи
узоры, как вы сделали в своем обновленном вопросе.
Если рп
Параметр URL предназначен для совпадения в любом месте строки запроса, поэтому вы должны изменить CondPattern читать (^|&)rp=/база знаний/
, а не просто удалить ^
префикс. Удалив ^
префикс, который вы потенциально соответствуете слишком много, например. abcrp=/база знаний/...
также будет соответствовать, хотя на самом деле это может быть проблемой, а может и не быть.
В противном случае эти обновленные директивы выглядят нормально, в зависимости от любых других конфликтов, которые могут существовать с другими директивами. Кэширование также может быть проблемой, особенно если вы используете CDN.