#regex #.htaccess
#регулярное выражение #.htaccess
Вопрос:
Я хочу, чтобы перенаправление htaccess 301 выполняло следующее, используя регулярное выражение:
Для
Тремя целями нового 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]