Как сделать 301 редирект с нижнего подчеркивания на тире при очень длинных URL

W1
На сайте с 22.01.2021
Offline
306
#51
br.almighty #:
Что такое символьный код продукта и какой именно продукт?

Продукт - это элемент каталога. А символьный код в терминологии Битрикса -это вот эта строка (формируется автоматически путём транслитерации названия продукта с заменой пробелов на соответствующий символ):

stol_uchenicheskiy_osanka_120_gr_2_7_reg_po_vysote_reg_naklon_stoleshnitsy_0_10_pryamoug_truba
Мой форум - https://webinfo.guru –Там я всегда на связи
br.almighty
На сайте с 13.07.2021
Offline
86
#52
ППЦ, хорошо, что я не пользуюсь битриксом... Спасибо за пояснение, я был уверен, что вы про что-то другое говорите.
L
На сайте с 10.02.2015
Offline
244
#53
SeVlad #:

По идее как-то так должно сработать

RewriteRule ^(.*)\_(.*) /$1-$2 [L,R=301]

Тему можно развить далее и добавить редиректы для большого кол-ва _.

Вариант для nginx, подсмотренный в интернетах (лично не проверял):

location ~ _ {
  rewrite ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5-$6-$7-$8-$9;
  rewrite ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5;
  rewrite ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3;
  rewrite ^([^_]*)_(.*)$ $1-$2;
  rewrite ^ $uri permanent;
}
E
На сайте с 01.10.2017
Offline
110
#54

Наверное, среди новых адресов тоже могут быть адреса с подчеркиванием. Так что в основном фильтре нужно выполнять полное сравнение адресов (путей). Но перед полным сравнением, конечно, можно проверить адрес (путь) запроса на наличие символа подчеркивания.

Если есть возможность обойтись без фильтра, то лучше всего сделать именно так. Т.е. просто к старым адресам привязать альтернативный обработчик (обработчики, если изначально их было несколько), выполняющий переадресацию, или изменить текущий, добавив в него альтернативное поведение. Кстати, в структуру некоторых CMS сразу закладывается возможность выполнять переадресацию вместо вывода страницы.

Домены на продажу: https://p20.ru/collection/domains-for-sale
Алеандр
На сайте с 08.12.2010
Offline
200
#55

Фига себе тут нагородили с простейшей задачей ))
Недавно делал у себя точно такую же, только еще и с редиректом на другой домен, поскольку переезд:

$redirect = str_replace('_','-',$_SERVER['REQUEST_URI']);
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://site.ru".$redirect);
exit;

Учитывая, что приводятся все урл к такому изменению, а новые страницы уже добавляются с нужным разделителем и проблема только в редиректе - просто сделать редирект, добавив условие, чтобы не зациклить. Например, так:

if (stristr($_SERVER['REQUEST_URI'],'_')) {
$redirect = str_replace('_','-',$_SERVER['REQUEST_URI']);
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://site.ru".$redirect);
exit;
}

И городить при этом непонятные правила в конфигурациях тоже не придется.

W1
На сайте с 22.01.2021
Offline
306
#56
Алеандр #:
Фига себе тут нагородили с простейшей задачей

Дык и не городили особенно:

webinfo #:

в данном случае проще всего написать свой скрипт. Это 1 строчка в .htaccess и несколько строк в самом скрипте.

Как сделать 301 редирект с нижнего подчеркивания на тире при очень длинных URL - Веб-строительство - Сайтостроение - Форум об интернет-маркетинге
Как сделать 301 редирект с нижнего подчеркивания на тире при очень длинных URL - Веб-строительство - Сайтостроение - Форум об интернет-маркетинге
  • 2023.04.14
  • searchengines.guru
Добрый день, подскажите, как сделать 301 редирект с нижнего подчеркивания на тире при том, что имеются очень длинные URL, вот к примеру...
Алеандр
На сайте с 08.12.2010
Offline
200
#57
webinfo #:
Дык и не городили особенно
И вместо скрипта на 3 строчки без применения htaccess - 6 страниц размытых обсуждений и споров о том, как это сделать ))
L
На сайте с 10.02.2015
Offline
244
#58
Алеандр #:
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://site.ru".$redirect);

можно заменить на:

header("Location: https://site.ru".$redirect, true, 301);
Алеандр
На сайте с 08.12.2010
Offline
200
#59
livetv #:

Можно заменить:

Это уже вопрос удобства и понимания в будущем. Я, иной раз, так сокращаю, что потом читать код, вытянутый в одну строку становится утомительно. Так то и переменная redirect не требуется в данной задаче.

if (stristr($_SERVER['REQUEST_URI'],'_')) { header("Location: https://site.ru".(str_replace('_','-',$_SERVER['REQUEST_URI'])),true,301); die(); }

А там уже и preg_match вместо stristr, кому удобнее, и str_replace на preg_replace можно заменить. Результат все равно будет тот же, это уже для маньяков сравнения скорости работы команд.

W1
На сайте с 22.01.2021
Offline
306
#60
Алеандр #:
И вместо скрипта на 3 строчки без применения htaccess

С htaccess правильнее.

Алеандр #:
6 страниц размытых обсуждений и споров о том, как это сделать ))

Угу. И ты решил, что 6 страниц - это мало, решил продолжить. 😏

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий