TIP: Use Markdown or, <pre> for multi line code blocks / <code> for inline code.
These forums are read-only and for archival purposes only!
Please join our new forums at discourse.kohanaframework.org
Роут и кодировка URL'а
  • Есть роут

    Route::set('search', 'string(/<str>(/<pg>))', array('str' => '.*', 'pg' => '\d{1,10}') ) ->defaults(array( 'controller' => 'main', 'action' => 'index', 'str' => '', )); Поисковик направляет на сайт по таким урлам: http://www.mysite.ru/string/%C4%E8%EA%E0%FF%20%DF%E1%EB%EE%ED%FF/ Роут не подхватывает их и выдает 404, тогда как http://www.mysite.ru/string/Дикая Яблоня/ подхватывается отлично. Как полечить?

    Функция перекодировки iconv("windows-1251", "UTF-8", urldecode($str)) работает, но к роуту ее дописать нельзя, т.к. до него дело вообще не доходит. Может быть, можно как-то в .htaccess обработать?

  • А вообще на index.php таких url'ов редирект есть?

    Что за поисковик, который отправляет на сайт по таким урлам?

    charset в заголовках везде правильный стоит?

  • Можно попробовать в роуте добавить символ % к regex (видимо там сейчас только буквы, цифры и пробелы). А внутри контроллера на всяк случай делать url_decode()

  • littfed, biakaveron - спасибо! index.php срабатывает, поисковик Гугл, charset=utf8.

    '.*' - это и %, как я понимаю. Или добавить '%' в константы в route.php? Нет, проблема, видимо, не в этом - см. ниже.

    Ковыряние вопроса дало следующее. Урлы типа /string/%C4%E8%EA%E0%FF%20%DF%E1%EB%EE%ED%FF/ Гугл проиндексировал со старого сайта, который работал в windows-1251. Новый сайт на Kohana работает в UTF8. Та же поисковая строка "Дикая Яблоня", закодированная из UTF8 будет выглядеть так: /string/%D0%94%D0%B8%D0%BA%D0%B0%D1%8F%20%D0%AF%D0%B1%D0%BB%D0%BE%D0%BD%D1%8F и отлично понимается роутом. Т.о. имеем сайт в utf8, который не понимает поисковую строку (часть урла) в win-1251. Есть еще идеи? Можно что-то делать с кодировкой в htaccess?

  • Надо тупо отдавать 404, чтобы Гугл понял, что закешировал какую-то хрень. Даже с точки зрения SEO непрактично отображать один и тот же контент для страниц с разными УРЛами

  • Не так. Поставлен 301 редирект со старых адресов на новые. Нужно, чтобы Гугл подхватил новые адреса, а не просто стер старые. А сейчас как раз тупо отдается 404 и старые адреса просто удаляются.

    Мне не понятно, почему роут не воспринимает эти символы как '.*' , зачем он пытается их раскодировать (безуспешно). И вообще, кто это делает, на каком этапе? Если я получу эти символы просто в качестве значения str, я их сам раскодирую в роуте. Но до этого не доходит.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion