Условие перезаписи htaccess, использующее регулярное выражение

Я нуб, когда дело доходит до регулярных выражений. Я пытаюсь выполнить следующее:

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/

Как я уже сказал, я нуб, поэтому я даже не знаю, с чего начать.

krskaggs13 05.04.2022 16:49

Это то, что у меня есть до сих пор, я даже близко? RewriteEngine On RewriteRule ^/shop/([az]+)-floating-front-rotor-kit/ ^/shop/$1-matching-front-rotor/

krskaggs13 05.04.2022 17:46

Пожалуйста, отредактируйте свой вопрос, чтобы добавить дополнительную информацию. Информация может потеряться в неформатированном коде в комментариях. Вы, кажется, рядом. product это просто одно слово?

MrWhite 05.04.2022 19:40

Отредактировал мой вопрос и нет, продукт может состоять из более чем одного слова, разделенного тире. Например, /shop/product-with-multiple-words-floating-front-rotor-kit/. Комплект "плавающий ротор" остался прежним.

krskaggs13 05.04.2022 20:03
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
4
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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 06.04.2022 16:30

@krskaggs13 Да, измените на R=301 для постоянного перенаправления. Обратите внимание, что предпочтительнее сначала протестировать 302, так как 301 постоянно кэшируются браузером и могут затруднить тестирование.

MrWhite 06.04.2022 16:32

Другие вопросы по теме