HTACCESS: замена соответствия регулярному выражению для URL

#regex #.htaccess

#регулярное выражение #.htaccess

Вопрос:

Я хочу, чтобы перенаправление htaccess 301 выполняло следующее, используя регулярное выражение:

http://example.com/folder/abc_123_123.htm

Для

http://example.com/abc-123-123.shtml

Тремя целями нового URL являются

  • удалить /папку/

  • замените все _ на —

  • замените htm на shtml

Ответ №1:

Насколько мне известно, ваш пункт № 2 не может быть выполнен без RewriteMap, что требует некоторой надоедливой конфигурации или нескольких правил.

Эта реализация должна быть универсальной и работать с любым количеством символов подчеркивания, но это дорого, поскольку может вызвать множество перенаправлений (фактически, потенциально достаточно для возникновения ошибок перенаправления в браузерах, если в ваших путях много символов подчеркивания):

 RewriteBase /
RewriteRule ^(folder/[^_]*)_(.*.html?)$ /$1-$2 [L,R=301]
RewriteRule ^folder/(* ).html?$ /$1.shtml [L,R=301]
  

Альтернативные варианты включают перечисление вариантов использования по мере необходимости или (я подозреваю, что лучше) переписывание запроса в скрипт на perl или php и выполнение regexp_replace перенаправление 301 оттуда.

 RewriteBase /
RewriteRule ^folder/(* ).html?$ /folder/redirect.php [L,QSA]
  

Ответ №2:

 RewriteEngine On
RewriteBase /
RewriteRule ^folder/([a-z] )_(d )_(d ).htm$ http://example.com/$1-$2-$3.shtml [L,R=301]