[РЕШЕНО] Фантомные дубли URL. Их вроде нет, но они есть.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

[РЕШЕНО] Фантомные дубли URL. Их вроде нет, но они есть.

Сообщение keltstr »

{ [РЕШЕНО] Код здесь: https://gist.github.com/keltstr/7515215 }

Проблема очень острая для проектов которые делают ставку на раскрутку через поисковики.
Маленькое исследование сайтов на Yii показало, что дубликаты URL (при добавлении в адрес имени скрипта index.php) присутствуют почти во всех проектах и лишь на нескольких обнаружено правильное поведение - отдача 404 ошибки.

Несколько примеров реакций сайтов при внедрении имени скрипта index.php в URL:
(сайты взяты из этой ветки форума viewforum.php?f=14)

######### Сайты у которых ДУБЛИКАТЫ в URL
http://rmcreative.ru/index.php/blog/tag/Yii
http://2gis.ru/index.php/#!/moscow/cent ... /1/ppage/1
http://rosyama.ru/index.php/page/about/
http://66.ru/index.php/news/main/
http://www.ps-box.ru/index.php/box/extreme/
http://vpodarok.ru/index.php/certificat
http://moskva.trud.com/index.php/jobs/proizvodstvo/
http://infit.ru/index.php/places/3.html
http://flisti.ru/index.php/latest
http://www.stay.com/index.php/new-york/restaurant/
http://myconfess.ru/index.php/category/20
http://www.29clubsports.com/index.php/about
http://crecer.ru/index.php/site/index.html
http://bmgame.org/index.php/users/login

######### Сайты которые ПРАВИЛЬНО отдают 404 ошибку
http://prostosite.me/index.php/about (но не все так гладко http://prostosite.me/index.php/feedback)
http://advizzer.com/index.php/project/about.html
http://www.holcim.com/index.php/about-us.html
http://www.astrazeneca.com/index.php/Investors
http://www.fifa.com/index.php/newscentre/index.html
http://billkill.ru/index.php/deals/dlya-biznesa

### Т.е. стандартные возможности не позволяют это контролировать.

После настройки .htaccess и urlManager - имя скрипта index.php в url отображаться перестало(createUrl) и выглядит как http://yii.ru/site/index   - т.е. вроде бы все хорошо.
Но если в адресную строку написать не http://yii.ru/site/index , а http://yii.ru/index.php/site/index , то страница site/index отобразится в обычном режиме,
а это неправильно(для seo).
Нужно чтобы http://yii.ru/index.php/site/index отдавал ошибку http 404 Not Found ИЛИ перманентно редиректил(301) на http://yii.ru/site/index

Подскажите пожалуйста как вы решаете данную проблему (особенно интересует опыт тех сайтов из списка выше - например http://billkill.ru ).
Последний раз редактировалось keltstr 2013.11.21, 05:38, всего редактировалось 6 раз.
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
noganno
Сообщения: 1
Зарегистрирован: 2013.07.26, 12:05

Re: Убрать дубликаты URL - /index.php/site/index и /site/ind

Сообщение noganno »

В .htaccess нужно прописать 301 редирект на эту ссылку
ref
Сообщения: 41
Зарегистрирован: 2013.10.27, 10:22

Re: Убрать дубликаты URL - /index.php/site/index и /site/ind

Сообщение ref »

В .htaccess:

Код: Выделить всё

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php
В конфиг для urlManager:

Код: Выделить всё

'showScriptName' => false
Так же можно добавить:

Код: Выделить всё

'useStrictParsing' => true
чтобы не было дублей, но тогда необходимо чтобы были правила для текущих маршрутов на сайте.
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Убрать дубликаты URL - /index.php/site/index и /site/ind

Сообщение keltstr »

noganno писал(а):В .htaccess нужно прописать 301 редирект на эту ссылку
покажите пожалуйста пример как сделать редирект с http://site.ru/index.php/c/a на http://site.ru/c/a
желательно чтобы имя домена site.ru в явном виде прописывать не нужно было, а иcпользовалась подстановка %{}
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Убрать дубликаты URL - /index.php/site/index и /site/ind

Сообщение keltstr »

ref писал(а): ...
Так же можно добавить:

Код: Выделить всё

'useStrictParsing' => true
чтобы не было дублей, но тогда необходимо чтобы были правила для текущих маршрутов на сайте.
Добавил useStrictParsing' => true, но не понимаю куда и какие правила для маршрутов нужно писать.
Покажите пожалуйста пример для http://site.ru/ccc/aaa
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Острая проблема почти для всех yii проектов

Сообщение keltstr »

Что лучше делать? у кого какие мнения по этому поводу?
1) отдавать 404 ошибку
2) перенаправлять на оригинал URLa (301 редирект)
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Острая проблема почти для всех yii проектов

Сообщение flashimage »

Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Острая проблема почти для всех yii проектов

Сообщение keltstr »

Вопрос остается открытым.

Спасибо за ссылку. Предложенным способом решение проблемы сводится к прописыванию в .htaccess всех вариантов ссылок:
...
RewriteRule ^index\.php/site/index.html$ /site/index.html [NC,R=301,L] - работает
...
Но например для проектов где вариантов ссылок много или они формируются динамически этот вариант не подходит.

Требуется решение которое будет универсальным - что-то вроде:
#должно находить в строке запроса '/index.php/controller/action?var=1' подстроку '/index.php' и переписывать запрос так '/controller/action?var=1'
RewriteRule ^index\.php(.*)$ $1 [NC,R=301,L] - но оно почему-то у меня не работает.

Кто способен исправить ошибку отпишитесь пожалуйста.
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Острая проблема почти для всех yii проектов

Сообщение yiijeka »

Нужно разбираться с исходниками....
Аватара пользователя
Beaten_Sect0r
Сообщения: 234
Зарегистрирован: 2011.06.15, 14:58
Откуда: Ярославль
Контактная информация:

Re: Острая проблема почти для всех yii проектов

Сообщение Beaten_Sect0r »

keltstr писал(а): RewriteRule ^index\.php(.*)$ $1 [NC,R=301,L] - но оно почему-то у меня не работает.

Код: Выделить всё

    # Otherwise forward it to index.php.
    RewriteRule . index.php

    RewriteCond %{THE_REQUEST} index.php
    RewriteRule ^index.php/(.*) /$1 [R=301,L] 
а так?
_https://coru.ws
lolka
Сообщения: 143
Зарегистрирован: 2013.05.05, 20:59

Re: Острая проблема почти для всех yii проектов

Сообщение lolka »

я решил эту проблему по другому просто создал в контроллере функцию init() который убирает index.php и идет редирект на нормальный url. плюс, если нет слеша то редирект на url со слешем
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Острая проблема почти для всех yii проектов

Сообщение samdark »

Ну, можно и в init.
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Острая проблема почти для всех yii проектов

Сообщение keltstr »

Спасибо за решение, но вот более элегантное решение(на мой взгляд) - одна надстройка для всего проекта(не нужно в каждом контроллере указывать фильтр или править init()).
Все описание в комментариях в коде (нужно создать файл protected.components.UrlManager.php и в конфигурации(protected/config/main.php указать настройки)
Код здесь: https://gist.github.com/keltstr/7515215
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
ref
Сообщения: 41
Зарегистрирован: 2013.10.27, 10:22

Re: Острая проблема почти для всех yii проектов

Сообщение ref »

В robots.txt «Disallow: /index.php», и вопрос с дублями решён за 2 секунды.
Аватара пользователя
keltstr
Сообщения: 83
Зарегистрирован: 2013.01.12, 23:17

Re: Острая проблема почти для всех yii проектов

Сообщение keltstr »

ref писал(а):В robots.txt «Disallow: /index.php», и вопрос с дублями решён за 2 секунды.
Как вариант - ДА, нО это хорошо, до тех пор пока вы в проект не вкладываете свои личные деньги или не отвечаете за него своей головой ))
Имею ввиду что это лишь попытка указания некоторым спайдерам " не нужно этого делать", а вот "делать" или "не делать" это уже их собственное решение.
http://guide.yii2.org-info.by/ - руководство Yii2 по-русски, со сквозным сопоставлением ссылок на рус. и англ. темы.Русский поиск.Работает на телефонах.Обновляется.Предложени по доработке viewtopic.php?f=19&t=21391
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [РЕШЕНО]Острая проблема почти для всех yii проектов

Сообщение samdark »

По крайней мере Google, Yandex, Bing, DuckDuckGo уважают robots.txt.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: [РЕШЕНО]Острая проблема почти для всех yii проектов

Сообщение ElisDN »

Я бы вообще сделал:

Код: Выделить всё

ksort($_GET);
$url = Yii::app()->controller->createUrl('', $_GET);
if (Yii::app()->request->getUrl() != $url) {
    Yii::app()->controller->redirect($url, true, 301);
}
 
и пусть теперь любые вводят.
Последний раз редактировалось ElisDN 2013.11.17, 22:08, всего редактировалось 2 раза.
ref
Сообщения: 41
Зарегистрирован: 2013.10.27, 10:22

Re: Острая проблема почти для всех yii проектов

Сообщение ref »

keltstr писал(а):Как вариант - ДА, нО это хорошо, до тех пор пока вы в проект не вкладываете свои личные деньги или не отвечаете за него своей головой ))
Имею ввиду что это лишь попытка указания некоторым спайдерам " не нужно этого делать", а вот "делать" или "не делать" это уже их собственное решение.
Вы ошибаетесь в силу отсутствия знаний. Это самое надёжное решение. Закрытые в файле robots.txt разделы абсолютно точно не будут индексироваться поисковыми системами.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [РЕШЕНО]Острая проблема почти для всех yii проектов

Сообщение samdark »

Ну, не совсем так. 100% гарантии это не даёт. Какой-нибудь странный бот может туда и пойти...
Ответить