Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Обновился с DLE 11.3 win-1251 на DLE 14.0 - старые url тегов перестали работать, как исправить?

Обновился с DLE 11.3 win-1251 на DLE 14.0 - старые url тегов перестали работать, как исправить?


     24.09.2020    Все вопросы » Общие вопросы    1027

вопрос
Обновил на дня свой древний сайт с DLE 11.3 win-1251 на DLE 14.0, обновление движка выполнил по инструкции и столкнулся с проблемой в ссылках на теги, а именно к примеру старые ссылки типа сайт.ру/tags/%CE%EA%F1%E0%ED%E0+%CA%E0%F0%E0%F1/ не работают. Теперь же ссылки в адресной строке имеют формат сайт.ру/tags/Оксана%20Карас/.

На сайте нашел похожую тему с аналогичной проблемой - https://dle-faq.ru/faq/questhacks/17776-problemy-s-url-tags-pri-smene-kodirovki-dle-kak-ispravit.html, но данный код не работает на DLE 14.0, уважаемые знатоки прошу вашей помощи с решением данной проблемы.

Ответил: dj-avtosh


if (mb_detect_encoding(urldecode($tag), 'UTF-8,CP1251') == 'Windows-1251') {
    $tag = mb_convert_encoding(urldecode ($tag), 'UTF-8','CP1251');
    header('Location: /tags/' . rawurlencode($tag) . '/', false, 301);
}

16 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 15:02 -

Я из вопроса не понял, что вы хотите превратить в utf-8,

если это %CE%EA%F1%E0%ED%E0+%CA%E0%F0%E0%F1, то

if (mb_detect_encoding(urldecode($tag)) == 'windows-1251') {
    $tag = iconv(mb_detect_encoding(urldecode($tag)), 'UTF-8//IGNORE', urldecode($tag) );
    $tag = str_replace(' ', '+', $tag);

    header('HTTP/1.0 301 Moved Permanently');
    header('Location: /tags/' . urlencode($tag) . '/');
    die('Redirect');
}


Если это Оксана%20Карас

if (mb_detect_encoding($tag) == 'windows-1251') {
    $tag = iconv(mb_detect_encoding($tag), 'UTF-8//IGNORE', $tag );
    $tag = str_replace(' ', '+', $tag);

    header('HTTP/1.0 301 Moved Permanently');
    header('Location: /tags/' . $tag . '/');
    die('Redirect');
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 15:08 -

если это %CE%EA%F1%E0%ED%E0+%CA%E0%F0%E0%F1, то


Вот это хотел исправить, добавил в engine.php после строчки
$tag = rawurldecode( $_GET['tag'] );


Этот код
if (mb_detect_encoding(urldecode($tag)) == 'windows-1251') {
    $tag = iconv(mb_detect_encoding(urldecode($tag)), 'UTF-8//IGNORE', urldecode($tag) );
    $tag = str_replace(' ', '+', $tag);

    header('HTTP/1.0 301 Moved Permanently');
    header('Location: /tags/' . urlencode($tag) . '/');
    die('Redirect');
}


Не помогло, редиректа не происходит со страницы %CE%EA%F1%E0%ED%E0+%CA%E0%F0%E0%F1 на Оксана%20Карас

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 15:39 -

if (mb_detect_encoding(urldecode($tag), 'ASCII,UTF-8,CP1251') == 'Windows-1251') {
    $tag = mb_convert_encoding(urldecode ($tag), 'UTF-8','CP1251');
    $tag = str_replace(' ', '+', $tag);

    header('HTTP/1.0 301 Moved Permanently');
    header('Location: /tags/' . urlencode($tag) . '/');
    die('Redirect');
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 15:42 -

Теперь редирект происходит, но не корректно к примеру с ссылки %CE%EA%F1%E0%ED%E0+%CA%E0%F0%E0%F1 перекидывает на Оксана%2BКарас, а нужно на Оксана%20Карас...

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 15:49 -

if (mb_detect_encoding(urldecode($tag), 'UTF-8,CP1251') == 'Windows-1251') {
    $tag = mb_convert_encoding(urldecode ($tag), 'UTF-8','CP1251');
    header('Location: /tags/' . urlencode($tag) . '/', false, 301);
}


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 16:03 -

Теперь редеректит на Оксана+Карас, соответственно новости по данному тегу не ищет, необходимо на Оксана%20Кара...

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 16:07 -

if (mb_detect_encoding(urldecode($tag), 'UTF-8,CP1251') == 'Windows-1251') {
    $tag = mb_convert_encoding(urldecode ($tag), 'UTF-8','CP1251');
    header('Location: /tags/' . rawurlencode($tag) . '/', false, 301);
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 16:13 -

Вот, теперь все отлично работает, благодарю за помощь... По крайней мере с русскими тегами, мне конечно не принципиально, но вот если старый тег имел такой url Adam+Beckenbaugh, то можно было бы сделать редирект на Adam%20Beckenbaugh ?

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 16:18 -

Метод превратит "+" в "%2B"

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 16:24 -

Если позиция принципиальная, то

if (mb_detect_encoding(urldecode($tag), 'UTF-8,CP1251') == 'Windows-1251') {
    $tag = mb_convert_encoding(urldecode ($tag), 'UTF-8','CP1251');
    header('Location: /tags/' . rawurlencode($tag) . '/', false, 301);
}

if ( preg_match('~\+~', $tag ) )
{
    header('Location: /tags/' . str_replace('+', '%2A', $tag) . '/', false, 301);
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 16:30 -

Попробовал, не фурычит, не редиректит... с Adam+Beckenbaugh на Adam%20Beckenbaugh

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 16:50 -

может быть $tag = rawurldecode( $_GET['tag'] ); превращает + в пробел?)

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 16:57 -

Я не знаю))) Не силен в php... Можно код?

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 17:02 -

в прошлом коде смените + на пробел, экранированный плюс тоже на пробел.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

aarka
Юзер

aarka - 24 сентября 2020 17:11 -

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

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 17:12 -

Обратитесь в стол заказов.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх