Как я могу использовать htaccess для перенаправления URL на основе его сегментов? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть несколько старых URL, которые с тех пор изменились.Прямо сейчас они переходят на мою страницу 404, поэтому мне нужно перенаправить их на новые URL-адреса.Исходные URL-адреса выглядят так:

http://example.com/en/blog/events-private/name-of-event

Новые URL-адреса выглядят так, без сегмента «блог»:

http://example.com/en/events-private/name-of-event

Это то, что я пытаюсь, но не работает:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/en/blog/events-private/(.*) /en/events-private/$1
</IfModule>

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018
RewriteRule ^/en/blog/events-private/(.*) /en/events-private/$1

В .htaccess шаблон RewriteRule соответствует URL-пути после того, как префикс каталога (который ведет к файлу .htaccess) будет первымбыли удаленыПрефикс каталога всегда заканчивается косой чертой, поэтому соответствующий URL-путь никогда не начинается с косой черты.Другими словами, вам просто нужно удалить префикс косой черты:

RewriteRule ^en/blog/events-private/(.*) /en/events-private/$1 [R=301,L]

(и не забывайте флаги R и L.)

Обратите внимание, что это контрастирует сиспользование mod_rewrite в контексте server (или virtualhost ).В этом контексте вам нужен префикс косой черты!Поскольку в контексте server шаблон соответствует полному URL-пути.

Кроме того, директива RewriteBase в этом примере является излишней (поскольку вы нене используется относительная замена ).И оболочку <IfModule mod_rewrite.c>, вероятно, следует удалить (если только она не предназначена для работы в системах без mod_rewrite).

0 голосов
/ 30 ноября 2018

Это не использует mod_rewrite, но, похоже, это работает:

RedirectMatch 301 ^/en/blog/events-private/(.*) /en/events-private/$1
...