Я нуб, когда дело доходит до регулярных выражений. Я пытаюсь выполнить следующее:
https://www.example.com/shop/product-floating-front-rotor-kit/
следует перенаправить на
https://www.example.com/shop/product-matching-front-rotor/
продукт должно быть названием продукта, я должен сделать это для нескольких продуктов.
Редактировать: Это то, что у меня есть до сих пор, я даже близко?
RewriteEngine On
RewriteRule ^/shop/([a-z]+)-floating-front-rotor-kit/ ^/shop/$1-matching-front-rotor/
Это то, что у меня есть до сих пор, я даже близко? RewriteEngine On RewriteRule ^/shop/([az]+)-floating-front-rotor-kit/ ^/shop/$1-matching-front-rotor/
Пожалуйста, отредактируйте свой вопрос, чтобы добавить дополнительную информацию. Информация может потеряться в неформатированном коде в комментариях. Вы, кажется, рядом. product
это просто одно слово?
Отредактировал мой вопрос и нет, продукт может состоять из более чем одного слова, разделенного тире. Например, /shop/product-with-multiple-words-floating-front-rotor-kit/. Комплект "плавающий ротор" остался прежним.
RewriteRule ^/shop/([a-z]+)-floating-front-rotor-kit/ ^/shop/$1-matching-front-rotor/
Это близко, только вот...
В .htaccess
URL-путь, соответствующий RewriteRule
шаблон (первый аргумент), не начинается с косой черты.
Строка замена имеет ошибочный префикс ^
. Это должна быть "обычная" строка, а не регулярное выражение.
[a-z]
не соответствует дефисам/тире, которые, как вы утверждаете, могут встречаться в названии продукта.
Вы не включили привязку конца строки ($
) в конец RewriteRule
шаблон, поэтому любая завершающая строка будет успешной и отброшена. (Это намерение?)
Это внутренняя «перезапись», а не «перенаправление», как указано. Вы должны включить флаг R
. (Внутреннее переписывание здесь вряд ли сработает, поскольку целевой URL-адрес требует дальнейшей перезаписи.)
Вместо этого попробуйте следующее. Это должно быть вверху файла .htaccess
, сразу после директивы RewriteEngine
.
RewriteRule ^shop/([a-z-]+)-floating-front-rotor-kit/$ /shop/$1-matching-front-rotor/ [R=302,L]
Это 302 (временная) переадресация.
Спасибо за объяснение. Если бы я хотел сделать это постоянным переписыванием, должен ли я изменить R = 302 на R = 301?
@krskaggs13 Да, измените на R=301
для постоянного перенаправления. Обратите внимание, что предпочтительнее сначала протестировать 302, так как 301 постоянно кэшируются браузером и могут затруднить тестирование.
Как я уже сказал, я нуб, поэтому я даже не знаю, с чего начать.