Базовое переписывание: с определенного URL-адреса на другой конкретный URL-адрес

То, что я прошу, очень просто, и я думаю, что это должно работать, но я не знаю, почему это не так.

По сути, мне нужны эти URL-адреса (1) для перенаправления 301 на эти другие (2)

  • (1) /es/madrid/ => (2) /es/madrid-es/
  • (1) /es/ibiza/ => (2) /es/ibiza-es/

Это мой подход:

RewriteRule ^/es/madrid/ https://example.com/es/madrid-es/ [R=301,L]
RewriteRule ^/es/ibiza/ https://example.com/es/ibiza-es/ [R=301,L]
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
RewriteRule ^/es/madrid/ https://example.com/es/madrid-es/ [R=301,L]
RewriteRule ^/es/ibiza/ https://example.com/es/ibiza-es/ [R=301,L]

В файлах .htaccess URL-путь, которому соответствует RewriteRuleшаблон, не начинается с косой черты. Таким образом, приведенные выше директивы никогда не будут соответствовать запрошенному URL-адресу, поэтому ничего не сделают.

Другими словами, сделайте это так:

RewriteRule ^es/madrid/ https://example.com/es/madrid-es/ [R=301,L]
RewriteRule ^es/ibiza/ https://example.com/es/ibiza-es/ [R=301,L]

Обратите внимание, что эти правила перенаправляют /es/madrid/<anything> - это намерение? В противном случае, чтобы соответствовать точному URL-пути, только затем включите якорь в конце строки. например. ^es/madrid/$.


Однако вы можете совместить эти два правила. Например:

RewriteRule ^(es)/(madrid|ibiza)/ https://example.com/$1/$2-$1/ [R=301,L]

Где обратные ссылки $1 и $2 соответствуют захваченным группам (заключенным в скобки подшаблонам) в предыдущем RewriteRuleшаблон.


В стороне: И, сделав еще один шаг вперед для любого двухсимвольного кода языка и место, вы можете сделать что-то вроде этого:

RewriteRule ^([a-z]{2})/(\w+)/ https://example.com/$1/$2-$1/ [R=301,L]

Это перенаправит /<lang>/<place>/<anything> на /<lang>/<place>-<lang>/, где <lang> — любой двухсимвольный код языка.

Еще раз спасибо MrWhite! Правила, которые вы мне дали RewriteRule ^([a-z]{2})/(\w+)/ https://example.com/$1/$2-$1/ [R=301,L], не применимы к моему случаю, так как это происходит только с этими двумя страницами.

Eduhud 17.03.2022 10:30

@Eduhud Да, это правило было довольно общим (просто служит примером). Однако вы можете объединить только эти два правила в одно (по крайней мере, в качестве академического упражнения). Я обновил свой ответ.

MrWhite 17.03.2022 10:39

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