![]() |
Сделать правильнее сделать 301 Moved Permanently
Всем привет))
Перенес сайт с cms написанной на .Net на Typo3. Все страницы раньше имели путь типа site.ru\contact.aspx , сейчас структура сайта такая же только расширение разное, с aspx поменялось на html. Так как сайту уже год, поисковики уже проиндексировали сайт. Т.е. хочется чтобы при запросе скажем site.ru\contact.aspx typo3 выдавала 301 Moved Permanently и перекидывал на site.ru\contact.html т.е. просто достаточно менять с aspx на html т.к. структура осталась такая же. Как это лучше реализовать? К typo3 прикручен realurl. |
сделал вот так, добавил в index.php
PHP код:
RewriteBase / RewriteRule ^(.*)\.aspx$ $1.html [R=permanent,L] |
Редиректы самого сервера работают быстрее и не надо ничего менять в ядре системы.
|
Обнаружилась проблема с новым RealURL.
Одинаковый контент выдается как для урлов вида page/ и page.html Раньше это решалось установкой в конфиге acceptHTMLsuffix = 1, но в последних версиях этот параметрв хоть и объявляется и описан в доке, но реально в коде не учитывается. Похоже что "принятие" урлов с .html зашито в коде, так как другие урлы, например .htm выдают 404 ошибку. Попробовал в .htaccess такое решение: Код:
RewriteBase / Что посоветуете? Updated: единственное что пока удалось сделать что бы все работало - поменять print.html на print.htm |
А если этот самый атрибут print транслировать просто в /адрес_страницы/ptint/ ?
|
Не получиться в .../print/
Так как RealURL умеет добавлять фиксированные переменные только в начало пути, т.е. /en/... или /print/... Добавить "в самый конец" можно только опцией fileName. Ну, вообщем, для конечного пользователя нет разницы как выглядит урл, можно и так и эдак сделать. Самое главное, что для SEO плохо что page/ и page.html выдают одно и тоже, а это поведение что называется "из коробки". |
Так на самом деле вполне будет логично выглядеть url типа domain.tld/print/page/id/ - и совершенно точно он не будет отзываться ни на какие *.html
Хотя, насколько я помню при использовании .htaccess в мануале к RealURL был комментарий к какой-то строке "при использовании такой настройки filename работать правильно не будут" (это вольный перевод - передача общего смысла фразы). Можеть быть дело в этом? Потому что у меня работает вроде как вполне адекватно все и при использовании .html и без него. |
Цитата:
РЕШЕНИЕ! Все оказалось просто, но не очевидно. В новой версии проверка наличия суффикса делается вот так: PHP код:
Причем этот конфиг предлагается по умолчанию как в примерах, так и в autoconf, вот кусок из class.tx_realurl_autoconfgen.php PHP код:
PS: Скорее это просто баг, на это указывает то что при генерации этот параметр учитывается простой проверкой, а не isset() PHP код:
|
Скорее надо выставить acceptHTMLsuffix в 0 - тогда RealURL не будет его воспринимать как еще один вариант именования страницы. Насколько помню это сделано для упрощения миграции со статичных сайтов на динамические.
|
Может быть ту информацию, которую я излагал выше сложно целиком воспринять.
Но еще раз повторю то, что уже писал - acceptHTMLsuffix в последних версиях RealURL не используется и не учитывается нигде. |
Я все прочитал, но мне с трудом верится что задокументированный функционал никоим образом не функционирует. Возможно что и так, не стану утверждать наверняка пока сам не опробую на новых версиях.
Кстати, а конфигурация писалась с нуля собственноручно или как шаблон использовалась автоматическая? |
Либо документация не поспевает, либо код переработан и этот параметр просто "забыли".
Тот код, что я видел в исходниках RealURL полгода назад, сильно отличается от того что есть сейчас. Проверить acceptHTMLsuffix легко - берете название параметра и ищите по исходникам где он встречается. Мой конфиг - самый что ни есть типовой: PHP код:
|
Я когда столкнулся с глюками при переходе на новую версию RealURL выработал "стратегию" перехода: включить автоконфиг несериализованный, сгенерить его, использовать как болванку для своего. Потому что на самом деле довольно много изменений вносится и не всегда работает ожидаемым образом, в результате изменение настроек лучше всего показывает именно автоконфиг.
Кстати, а внутренние редиректы RealURL выдают 301 код или нет? |
Мой конфиг по основным параметрам (исключения то что в ветке выше) идентичен тому, что предлагает autoconfig
PHP код:
|
Проверил на паре сайтов. Везде обновился до последних версий всех плагинов и переводов.
Результаты: Сайт сконфигурированный на использование суффикса - www.rzhevrealty.ru На самом деле адрес воспринимается и с суффиксом и без и адрес приводит к одной и той же странице. Сайт сконфигурированный на использование без суффикса - www.jawaclub.ru При использовании суффикса выдается 404-я ошибка и страница этой ошибки. |
Можете выложить конфиг для RealURL второго сайта (только его начало)?
У вас там кстати есть SEO-недоработка, урл со слэшем в конце и без него выдают одно и тоже: http://www.jawaclub.ru/prosmotr-novosti http://www.jawaclub.ru/prosmotr-novosti/ |
Этот конфиг стопроцентно не мой собственный, брал его вроде бы из wiki.typo3.org давным давно и с тех пор если и менял, то крайне незначительно:
Код:
<?php Ну и заодно следует учитывать специфику использования только nginx без apache :) |
Ваш конфиг является подтверждением моей догадки, у вас нет этой строки: 'defaultToHTMLsuffixOnPrev' => 0
Поэтому .html ваш сайт не принимает! Если бы вы создали конфигурацию как autoconf и внесли в нее свои правки, то вероятнее всего строка с 'defaultToHTMLsuffixOnPrev' => 0 у вас осталась бы. А запрет ссылок без "/" на конце делается вот так: 'appendMissingSlash' => 'ifNotFile,redirect' Цитата:
|
В том и дело что это не мной написанный конфиг, 5 лет назад я еще не очень подробно разбирался с RealURL и конфиги брал готовые с wiki.typo3.org правя в них исключительно rootpageid.
Добавлять отсутствующий слэш на конце гораздо лучше умеет вебсервер, в том же htaccess приложенном в доке по RealURL одна из строк именно этим и занимается. В nginx это тоже можно делать, но в nginx нет такой фичи как перенаправление по завершающим слэшам как в Апаче и поэтому в принципе не нужно заморачиваться на такие мелочи, достаточно чтобы страница была верно указана в sitemap.xml. |
Цитата:
Но, скажем так, RealURL в дефолтном конфиге тоже должен препятствовать дублям страниц по разным адресам, в независимости от настройки .htaccess Во вторых не все вещи можно сделать в .htaccess с учетом "виртуальности" практически всех url в TYPO3. Мануал об этом и говорит (Note that it...): Цитата:
Цитата:
|
В nginx весь этот непомерного объема htaccess решается парой строк:
Код:
location / { |
Я не спрециалист по SEO, поэтому только выполняю рекомендации. SEO-шники говорят что ссылки .../page/ и .../page будут дублями для поисковиков.
Эту строку "непомерного объема" можно записать и короче (у вас вообще 3 строки :) ). Кроме того, nginx стоит не везде, конфиг nginx более сложен для понимания и не доступен для редактирования без рутовских прав. А .htaccess могут редактировать и обычные пользователи shared-хостинга. PS: Дмитрий Дулепов согласился со мной что то, что обсуждалось выше, это баг RealURL и пофиксит в следующей 1.10.3 версии http://bugs.typo3.org/view.php?id=18081 |
Конфиг nginx яснее ясного, но это уже вопрос предпочтений.
Про невозможность редактирования конфига nginx пользователями shared'ов советую посмотреть как это устроено на nic.ru - и, заметьте, работает как часы. А про баг, что это недоработка это понятно, хорошо что Дулепов пофиксит это. |
Часовой пояс GMT +4, время: 07:43. |
Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot