.htaccess

+32
5.36K
По просьбе PrazdNik, и по вопросу от Lana, решил чето полезненькое написать)

Закрытие дублей страниц с применением 301 редиректа!

!!! обсуждение только для инстанта и только закрытие дублей!!!

Склейкаwww, индексных файлов и utm меток будет работать для любой версии движка (для любой cms)

Я не спец поэтому приведенные примеры могут быть не правильны, но они работают) кто будет поправлять буду только рад)

1. закрытие дублей главной страницы (помогли просторы интернета):

в дефолте есть 4 дубля
-с www
-c www и index.php
-без www
-без www но с index.php

301 редирект всего на "без www"

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*) site.ru/$1 [L,R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ site.ru/ [R=301,L]


… правила можно прописать без явного указания домена:

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ %1/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ %1/$1 [R=301,L]


2. форумный прикол с /thread4738-1.html

RewriteRule ^forum(.*)-1.html$ site.ru/forum$1.html [R=301,L]

— данный вариант вызывал проблемы при редактировании сообщений на первой странице,
поправка от MakArtSoft :

RewriteRule ^forum/thread(.*)-1.html$ site.ru/forum/thread$1.html [R=301,L]

И добавляю предложенный вариант от MakArtSoft, по склейки ссылок с utm метками:

3. Склейка UTM меток (ссылки выдаваемые твиттером)

RewriteCond %{QUERY_STRING} ^utm_source(.*)$ [NC]
RewriteRule (.*) $1? [R=301,L]


4. Canonical не относится к .htaccess но помогает убрать некоторые дубли (автор SJen)

добавить php код в файл шаблона template.php, в самый верх:

  1. $where = $_SERVER["REQUEST_URI"];
  2. $q = strpos($where,'?');
  3. if ($q){ $canonical = substr($where,0,$q);
  4. }else{ $canonical = $where; }
  5. if ($canonical=='/'){$canonical='';}
  6. elseif ($canonical=='/index.php') {$canonical='';}
  7. $canonical = 'http://'.$_SERVER['HTTP_HOST'].$canonical;
в секции head до закрывающего тега </head> добавить:

  1. <link rel="canonical" href="<?php echo $canonical; ?>"/>
+2
dontstop dontstop 12 лет назад #
Полезное дело однако сделал ;)
+2
Lana Lana 12 лет назад #
Спасибо! :)
+2
soxom soxom 12 лет назад #
Отличная работа! Все сделано правильно, мой программист точно такое же соорудил )))
+1
Gopok23 Gopok23 12 лет назад #
Большое спасибо, очень полезно)
0
reload reload 12 лет назад #
Сейчас в примерах, временно, с переадресацией на html будут проблемы
пытаюсь уюрать знак вопроса ))
кто пользуется твитером знает зачем это, пытаюсь склеить ссылки которые генерирует твитер подставляя в адрес свои значения - тоже ведь дубли которые создаются не движком зато индексируются быстрее настоящих адресов...
У кого есть идеи подсказывайте - не поддается гадина и пишут что в htaccess не обработать знак вопроса, но думаю выход должен быть)
Олег Васильевич я Олег Васильевич я 12 лет назад #
Комментарий удален
0
reload reload 12 лет назад #
Вообще имеет значение "с www" "без www" или важен только клей? Если имеет, то в каких случаях надо "с www" а в каких "без www"?
На этот вопрос не отвечу, да и реально ответов он не имеет) просто нужно чтоб не было дублей, а там сами смотрите какой домен на данный момент имеет большую индексацию ну или какой больше нравится)
Мне не нравится с www так как по логике это домен следующего уровня) поэтому с самого начала отбрасываю www.
Хотя яша и гоша решили что им уютней с www) а вот контакт решил без)
В общем выбирать вам!

редирек правильно, хотя может и не правильно) но работает)
0
picaboo picaboo 12 лет назад #
Для начала надо определится, главный сайт с www или нет. Если вопрос привел в ступор - смотрим настройки и как в конфиге сайта указано. Тогда уже делаем редирект на тот по которому формируются урлы внутри движка. У вас может быть и обратная ситуация - главный домен без www и тогда надо сделать редирект на него.
0
soxom soxom 12 лет назад #
Если сайт уже проиндексирован, то смотрите какую версию сайта "съели" поисковики. Если не проиндексирован, то выберите то что считаете нужным
Олег Васильевич я Олег Васильевич я 12 лет назад #
Комментарий удален
0
reload reload 12 лет назад #
указанные выше правила, клеят страницы со слешем и без?
в инстанте вроде нет страниц со слешем (1.9) они уже склеены

Вот мне, похоже, надо чтоб слеш присутствовал.
зачем? или вы сами не знаете?

Главное чтобы страницы были уникальны и не было дублей! все остальное предрассудки, имхо)
+1
soxom soxom 12 лет назад #
Стопудово! Главное исключить то что может помешать правильной индексации, а со слэшем или без, это совершенно не важно
Олег Васильевич я Олег Васильевич я 12 лет назад #
Комментарий удален
Олег Васильевич я Олег Васильевич я 12 лет назад #
Комментарий удален
0
reload reload 12 лет назад #
1.С чего вы взяли, что я говорю о сайте на InstantCMS?
наверное с того, что мы находимся на оф сайте именно инстанта, а не другого движка)
да и обсуждаем .htaccess для инстанта, а у каждого движка свои нюансы!)

Большой брат Google выдаёт в поиске главную вот так: www.kurs.cv.ua/
мне как то все равно что он там выдает если у меня все будет склеено 301 редиректом)
0
reload reload 12 лет назад #
забыл)
2.Всё же страницы со слешем и без оного - это дублию...
Нет их в инстанте!!!
0
reload reload 12 лет назад #
нет ни у кого идей как обрезать адреса такого вида?:
.../forum/thread119-17.html?utm_source=twitterfeed&utm_medium=twitter
я что не придумаю, оно как то странно работает) проверяю, закидываю на хос, все отлично, перепроверяю везде, иду обкурить это дело, возвращаюсь, проверяю - не пашет)))
уже 3 раза так)))
+2
artlab artlab 12 лет назад #
Для универсальности можно это
Код PHP:
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*) http://site.ru/$1 [L,R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]
заменить на это
Код PHP:
RewriteCond %{HTTP_HOST}	^www\.(.*)	[NC]
RewriteRule ^(.*)$ http://%1/$1	[R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://%1/$1 [R=301,L]
Олег Васильевич я Олег Васильевич я 12 лет назад #
Комментарий удален
0
artlab artlab 12 лет назад #
да чему там учиться,просто сайтов несколько,влом хатацесс для каждого отдельно делать))
0
reload reload 12 лет назад #
Запись человека, которому есть что сказать. Спасибо! pivua) , поучитесь
Это ты к чему???
0
artlab artlab 12 лет назад #
garry помог,за что ему отдельное спасибо+++
Получилась такая вот хата для параноиков)))
Спойлер
0
artlab artlab 12 лет назад #

Устроил себе выходной,взял пива,расслабился...
На тему хатацесс вот несколько ненужного (кому как)))копипаста)

копипаст

Удачи ))

+2
reload reload 12 лет назад #
&#9702; &#1229;&#593;&#409;&#1195;и&#1230; &#9702; &#11363;&#593;&#599;и&#7899;&#1226;&#7899;&#946;, спасибо конечно)
Ребят давайте писать именно по закрытию дублей!!!)

.htaccess велик и могуч и писать про него можно много) А вот тема была создана именно для обсуждения закрытия дублей с применением 301 редиректа и именно для инстанта!!!

в общем вопрос пока остался:
нет ни у кого идей как обрезать адреса такого вида?: .../forum/thread119-17.html?utm_source=twitterfeed&utm_medium=twitter
Я решил но через задницу - если идей ни укого не будет - тогда выложу)
0
Джехутимери Джехутимери 12 лет назад #
Что-то мне подсказывает, что решение еще не скоро будет...
0
reload reload 12 лет назад #
дак проще проще вариант уже придумали) с указанием каноникал!
зы: а решение было сразу) просто не хотел сразу выкладывать)
но каноникал лучше - применяйте его)
0
Endroid Endroid 11 лет назад #
Для тех, кому каноникал не подходит, вставляем это:
Код PHP:
  1. RewriteCond %{QUERY_STRING} utm_source(.*)$ [NC]
  2. RewriteRule (.*) $1? [R=301,L]
0
IRIP IRIP 7 лет назад #
не помогает
0
mk727 mk727 12 лет назад #
Спасибо за дубли форума. Сегодня только заметил что первая страница тем имеет дубли.
0
Endroid Endroid 11 лет назад #
Код PHP:
  1. RewriteRule ^forum(.*)-1.html$ http://site.ru/forum$1.html [R=301,L]
Это решает проблему с дублями страниц на форуме, но появляется другая проблема - невозможно отредактировать сообщения посетителей на первой странице в теме форума.

Пример, ссылка редактирования сообщения имеет вид /forum/editpost53-1.html, при нажатии она преобразовывается в /forum/editpost53.html и выдает 404 ошибку
0
reload reload 11 лет назад #
Можно еще правило для editpost добавить, чтоб не 404 отдавало, а открывало editpostХХХ-1.html

Попробуйте что-то вроде такого добавить

Код PHP:
  1. RewriteRule ^forum/editpost(.*)-1.html http://site.ru/forum/editpost$1-1.html [L]
Позже попробую посмотреть...
0
Endroid Endroid 11 лет назад #
Этот вариант не работает. Сам допилить не могу в чем дело (
+2
Endroid Endroid 11 лет назад #
Решил проблему. Для тех кому интересно

Вместо
Код PHP:
  1. RewriteRule ^forum(.*)-1.html$ http://site.ru/forum$1.html [R=301,L]
нужно ставить
Код PHP:
  1. RewriteRule ^forum/thread(.*)-1.html$ http://site.ru/forum/thread$1.html [R=301,L]
это уберет форумный прикол с -1.htm и позволит редактировать сообщения
0
Батосай Батосай 10 лет назад #
Спасибо, данное правило сработало у меня на 1.10.3 smile
0
sindoyun sindoyun 8 лет назад #
На 1.10.5 не работает! Есть еще варианты?
0
Endroid Endroid 8 лет назад #

Еще от автора

Обрезание внешних ссылок при редиректе (/go/url)
Небольшая, возможно полезная заметочка, для борьбы с "обрезанием" внешних ссылок при редиректе (/go/url)
Замена несуществующих картинок
Особо полезного в моем блоге ничего нет) Зато есть сам блог) В общем мизерный скрипт для сайта, который заменяет/убирает системный вывод битой картинк
"Украшалка" к 1 апреля)
С первым апреля друзья!) В честь первого апреля предлагаю запустить мух на свой сайт)) Звучит глупо, но первое апреля все же) Как? и что за мух?
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.