Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 18.01.2011, 14:14   #1
musson
Продвинутый
 
Регистрация: 20.11.2010
Сообщений: 40
По умолчанию Сделать правильнее сделать 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.
musson вне форума   Ответить с цитированием
Старый 18.01.2011, 17:22   #2
musson
Продвинутый
 
Регистрация: 20.11.2010
Сообщений: 40
По умолчанию

сделал вот так, добавил в index.php

PHP код:
$linkRequest $_SERVER['REQUEST_URI'];
if(
preg_match("/.aspx$/",$linkRequest))
{
    
$toRedirect preg_replace("/(.aspx$)/",".html"$linkRequest);
    
header('HTTP/1.1 301 Moved Permanently');
    
header('Location: http://www.site.ru'.$toRedirect);
    exit();

либо


RewriteBase /
RewriteRule ^(.*)\.aspx$ $1.html [R=permanent,L]

Последний раз редактировалось musson; 18.01.2011 в 17:44
musson вне форума   Ответить с цитированием
Старый 19.01.2011, 02:50   #3
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

Редиректы самого сервера работают быстрее и не надо ничего менять в ядре системы.
-=UncleByte=- вне форума   Ответить с цитированием
Старый 05.04.2011, 19:31   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Обнаружилась проблема с новым RealURL.
Одинаковый контент выдается как для урлов вида page/ и page.html
Раньше это решалось установкой в конфиге acceptHTMLsuffix = 1, но в последних версиях этот параметрв хоть и объявляется и описан в доке, но реально в коде не учитывается. Похоже что "принятие" урлов с .html зашито в коде, так как другие урлы, например .htm выдают 404 ошибку.

Попробовал в .htaccess такое решение:
Код:
RewriteBase /
RewriteRule ^(.*)\.html$ $1/ [R=permanent,L]
Работает - но теперь перестали работать страницы "версия для печати", урл которых конфигом RealURL был задан как .../page.html

Что посоветуете?

Updated: единственное что пока удалось сделать что бы все работало - поменять print.html на print.htm

Последний раз редактировалось dmartynenko; 05.04.2011 в 19:48
dmartynenko вне форума   Ответить с цитированием
Старый 06.04.2011, 19:19   #5
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

А если этот самый атрибут print транслировать просто в /адрес_страницы/ptint/ ?
-=UncleByte=- вне форума   Ответить с цитированием
Старый 06.04.2011, 19:38   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Не получиться в .../print/
Так как RealURL умеет добавлять фиксированные переменные только в начало пути, т.е. /en/... или /print/...
Добавить "в самый конец" можно только опцией fileName.

Ну, вообщем, для конечного пользователя нет разницы как выглядит урл, можно и так и эдак сделать.

Самое главное, что для SEO плохо что page/ и page.html выдают одно и тоже, а это поведение что называется "из коробки".
dmartynenko вне форума   Ответить с цитированием
Старый 07.04.2011, 07:35   #7
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

Так на самом деле вполне будет логично выглядеть url типа domain.tld/print/page/id/ - и совершенно точно он не будет отзываться ни на какие *.html
Хотя, насколько я помню при использовании .htaccess в мануале к RealURL был комментарий к какой-то строке "при использовании такой настройки filename работать правильно не будут" (это вольный перевод - передача общего смысла фразы). Можеть быть дело в этом?
Потому что у меня работает вроде как вполне адекватно все и при использовании .html и без него.
-=UncleByte=- вне форума   Ответить с цитированием
Старый 07.04.2011, 14:39   #8
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от -=UncleByte=- Посмотреть сообщение
Так на самом деле вполне будет логично выглядеть url типа domain.tld/print/page/id/ - и совершенно точно он не будет отзываться ни на какие *.html
Судя по тому какое поведение я наблюдаю сейчас на последнем RealURL, то получиться что и в этом случае domain.tld/print/page/id/ и domain.tld/print/page/id.html будут показывать одно и тоже.

РЕШЕНИЕ!

Все оказалось просто, но не очевидно. В новой версии проверка наличия суффикса делается вот так:
PHP код:
protected function decodeSpURL_decodeFileName_checkHtmlSuffix($fileName$segment$extension, array &$pathParts) {
    
$handled false;
    if (isset(
$this->extConf['fileName']['defaultToHTMLsuffixOnPrev'])) {
        
$suffix $this->extConf['fileName']['defaultToHTMLsuffixOnPrev'];
        
$suffix = (!$this->isString($suffix'defaultToHTMLsuffixOnPrev') ? '.html' $suffix);
        if (
$suffix == '.' $extension) {
            
$pathParts[] = rawurlencode($segment);
            
$this->filePart '.' $extension;
        }
        else {
            
$this->decodeSpURL_throw404('File "' $fileName '" was not found (2)!');
        }
        
$handled true;
    }
    return 
$handled;

Т.е. даже если defaultToHTMLsuffixOnPrev установлен в ноль в конфиге, то это означает что .html суффиксы будут приняты!

Причем этот конфиг предлагается по умолчанию как в примерах, так и в autoconf, вот кусок из class.tx_realurl_autoconfgen.php
PHP код:
'fileName' => array(
    
'defaultToHTMLsuffixOnPrev' => 0,
    
'acceptHTMLsuffix' => 1,

Поэтому, что бы суффиксы .html давали 404 ошибку, строку с defaultToHTMLsuffixOnPrev из конфига нужно убрать совсем!

PS: Скорее это просто баг, на это указывает то что при генерации этот параметр учитывается простой проверкой, а не isset()
PHP код:
    elseif ($url != '') {
        
$suffix $this->extConf['fileName']['defaultToHTMLsuffixOnPrev'];
        if (
$suffix) { 
dmartynenko вне форума   Ответить с цитированием
Старый 07.04.2011, 15:33   #9
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

Скорее надо выставить acceptHTMLsuffix в 0 - тогда RealURL не будет его воспринимать как еще один вариант именования страницы. Насколько помню это сделано для упрощения миграции со статичных сайтов на динамические.
-=UncleByte=- вне форума   Ответить с цитированием
Старый 07.04.2011, 15:38   #10
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Может быть ту информацию, которую я излагал выше сложно целиком воспринять.
Но еще раз повторю то, что уже писал - acceptHTMLsuffix в последних версиях RealURL не используется и не учитывается нигде.
dmartynenko вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как правильней сделать Владимир Умнов Общие вопросы 2 12.10.2005 11:44


Часовой пояс GMT +4, время: 16:56.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория