Помогите с 301 редиректом для DLE

12
AMD643200
На сайте с 21.04.2009
Offline
112
7808

Движок сайта DLE, как известно без дополнительных действий у этого движка появляются дубли страниц за счёт страниц со слэшем и без, например: http://www.anime-news.org.ua/anime и http://www.anime-news.org.ua/anime/ обе эти страницы имели одинаковый контент и выдавали статус код 200 ОК. Я решил добавлять в конец адреса слэш с 301 редиректом, нашёл в инете вот такой код:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

Но возникла проблема в конец всех файлов слэш стал добавляться, то есть, например: http://www.anime-news.org.ua/sitemap.xml/ Тогда я изменил код таким образом:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*).xml
RewriteCond %{REQUEST_URI} !(.*).html
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

Слэш перестал добавляться к html и xml файлам, вроде всё работает нормально, но хотел бы комментарий от знающих людей, всё ли правильно было сделано. И отдельно вопрос: Что значит строчка:

RewriteCond %{REQUEST_FILENAME} !-f

Также ещё вопрос: На сайт устанавливал модуль карты сайта, изначально для ЧПУ в .htaccess был прописан такой код:

RewriteRule ^sitemap(/?)+$ /?do=sitemap [L]

Так как с таким кодом были доступны две одинаковые страницы с кодом статуса 200 ОК: http://www.anime-news.org.ua/sitemap и http://www.anime-news.org.ua/sitemap/.

Поменял код на:

RewriteRule ^sitemap/(.*)$ /?do=sitemap [L]

Правильно ли я сделал?

Далее сделал перенаправление с домена без www на домен с www, а также с /index.php /index.html на /.

RewriteCond %{HTTP_HOST} ^anime-news\.org.ua$ [NC]

RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

# Определяем главное зеркало

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

Всё ли правильно?

Потом посмотрел в панель вебмастера в гугле и увидел, что есть ещё дубли за счёт, например: http://www.anime-news.org.ua/anime/ и http://www.anime-news.org.ua/anime/page/1/. Добавил вот такой код:

# Редирект с первой страницы на основную

RewriteRule ^(.*)/1$ $1 [R=301,L]
RewriteRule ^(.*)page$ $1 [R=301,L]

Но не работает такой код, если ввести адрес http://www.anime-news.org.ua/anime/page/1/, то перенаправление не происходит, а если ввести http://www.anime-news.org.ua/anime/page/1 , тогда вообще кидает на страницу с таким же содержанием, но адресом http://www.anime-news.org.ua/home/amd7750/public_html/home/amd7750/public_html/anime/.
Как исправить код, что бы правильно обрабатывало?
Помогите, пожалуйста!

На данный момент весь код имеет вид:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{HTTP_HOST} ^anime-news\.org.ua$ [NC]
RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

# Определяем главное зеркало
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]

# Редирект с первой страницы на основную
RewriteRule ^(.*)/1$ $1 [R=301,L]
RewriteRule ^(.*)page$ $1 [R=301,L]

# Карта сайта
RewriteRule ^sitemap/(.*)$ /?do=sitemap [L]

# Без слэша на слэш
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*).xml
RewriteCond %{REQUEST_URI} !(.*).html
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

Дальше стандартное содержание от движка DLE 9.3.

P.S. Дополнительный вопрос: Как правильно слэш или слеш или этого слова в русском языке в таком виде вообще нету?

siv1987
На сайте с 02.04.2009
Offline
427
#1
AMD643200:
Поменял код на:

Правильно ли я сделал?

Нет.

Остальные г-редиректы даже не стал смотреть.

#Для index.php

RewriteCond %{THE_REQUEST} index\.(php|html)

RewriteRule ^index\.(php|html)$ / [L,R=301]

#Page1

RewriteRule ^(.*)page/1/?$ /$1 [L,R=301]

#Для со слэшем и расширением

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^.]+)(?<!/)$ /$1/ [L,R=301]

добавить после и в таком порядке

RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

AMD643200
На сайте с 21.04.2009
Offline
112
#2

siv1987

Спасибо за помощь, но не вышло.

Попробовал вот так:

#Для index.php

RewriteCond %{THE_REQUEST} index\.(php|html)
RewriteRule ^index\.(php|html)$ / [L,R=301]

#Page1
RewriteRule ^(.*)page/1/?$ /$1 [L,R=301]

#Для со слэшем и расширением
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)(?<!/)$ /$1/ [L,R=301]

RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

И так:

RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]


#Для index.php
RewriteCond %{THE_REQUEST} index\.(php|html)
RewriteRule ^index\.(php|html)$ / [L,R=301]

#Page1
RewriteRule ^(.*)page/1/?$ /$1 [L,R=301]

#Для со слэшем и расширением
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)(?<!/)$ /$1/ [L,R=301]

В обоих случаях на всех страницах сайта белый экран с надписью:

Moved Permanently

The document has moved here.

Что я сделал не так? Помогите, пожалуйста.

ST
На сайте с 19.09.2011
Offline
4
#3

Вообще как-то у вас все запутано, извиняюсь...

Посмотрите в дефолтный .htaccess

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

1-ое:

Например эта строка

RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

отвечает за то чтобы обращения как к site.com/cat1/ так и к site.com/cat1 обрабатывались одинаково (для этого знак вопрос после / в регулярном выражении).

2-ое:

я проверил у меня на dle нет 301 редиректа как в вашем случае (это наверное ваши настройки)

seo_trudogolik добавил 27.09.2011 в 23:42

Потом посмотрел в панель вебмастера в гугле и увидел, что есть ещё дубли за счёт, например: http://www.anime-news.org.ua/anime/ и http://www.anime-news.org.ua/anime/page/1/. Добавил вот такой код:

Чтобы таких дублей не было, нужно все что /page/1 закрыть от индексации, я делал через

<meta name="robots" content="noindex,follow" />

(робот по ссылкам с этих страниц будет прекрасно переходить)

seo_trudogolik добавил 27.09.2011 в 23:49

Я для этого правил engine.php, возможно существует более "правильный" способ, но это было очень давно и я туда не хочу лезть, яша сайт "любит" пусть любит и дальше.... :)

Вот, что ставил я перед

$metatags = <<<HTML
<title>{$metatags['title']}</title>
$seo_meta_robots="<meta name=\"robots\" content=\"noindex,follow\" />";

if (
preg_match ("#^/$#",$_SERVER['REQUEST_URI']) ||
preg_match ("#^/([^.]+)/([0-9]+)-(.*).html(/?)+$#",$_SERVER['REQUEST_URI']) ||
preg_match ("#^/([^.]+)/?$#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/[0-9]{4}#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/catalog/([^/]*)(/?)+$#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#/page/[0-9]+/?$#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/user/#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/user/.+?/news#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/\?#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/favorites/#",$_SERVER['REQUEST_URI']) &&
!preg_match ("#^/[0-9]{4}/[0-9]{2}?/[0-9]{2}?/?#",$_SERVER['REQUEST_URI'])
)
{
$seo_meta_robots="<meta name=\"robots\" content=\"all\" />";
}

А далее вот так

$metatags = <<<HTML
<title>{$metatags['title']}</title>
<meta http-equiv="Content-Type" content="text/html; charset={$config['charset']}" />
<meta name="description" content="{$metatags['description']}" />
<meta name="keywords" content="{$metatags['keywords']}" />
$seo_meta_robots
<meta name="revisit-after" content="1 days" />
<link rel="search" type="application/opensearchdescription+xml" href="{$config['http_home_url']}engine/opensearch.php" title="{$config['home_title']}" />
HTML;

А вообще DLE очень классный движок, его если нормально "подпилять" то все будет ок :)

тот кто работает - добьется цели (http://trudogolik.com.ua)
AMD643200
На сайте с 21.04.2009
Offline
112
#4

seo_trudogolik

1) В движке DLE нет 301 редиректа на основной домен сайта, например: с http://anime-news.org.ua/ на http://www.anime-news.org.ua/.

2) В движке DLE нет 301 редиректа на / с /index.php и / index.html.

3) Также возникают дубли из-за страниц вида: page/2/ и page/2, это две одинаковые страницы, которые выдают статус 200 ОК, то есть создаться море дублей, особенно учитывая, что на сайте уже более двух тысяч новостей…

Надо реализовать вышеописанные пункты.

1 и 2 пункт в любом случае 301 редирект, а вот 3 пункт спорный с ним справляются люди по-разному. Идут до сих пор споры, что лучше ссылки со слэшем или без. Я выбрал вариант ссылок со слэшем, так как мне лично ссылки со слэшем в конце нравятся больше и, похоже, создатели движка DLE думают также, так как движок генерирует ссылки со слэшем в конце, если выбрать вариант без слэшей, тогда нужно будет вносить довольно много изменений в движок, какие именно можно прочитать здесь: http://alaev.info/post/2400

Закрыть страницы без слэшей от индексации при помощи мета тега <meta name="robots" content="noindex,follow" /> идея хорошая, но я догадываюсь, что придется опять-таки же вносить изменения в движок сайта, сомневаюсь, что эти теги можно расставить на нужные страницы в автоматическом режиме без изменений в движке, хотя может я и ошибаюсь, напишите тогда, как это сделать, если это так.

Из выше сказанного, учитывая тот факт, что я не хочу вносить изменений в движок сайта, следует вывод, что наиболее рациональный выход из сложившейся ситуации – это использовать 301 редиректы, так как в этом случае нужно изменить только один файл, а именно: .htaccess

Так как реализовать все 3 пункта описанные в начале этого сообщения при помощи только 301 редиректов редактируя только файл: .htaccess?

P.S. ИМХО: Ещё бонус от 301 редиректа, если со страницы page/2 происходит 301 редирект на страницу page/2/, тогда в этом случае вес первой страницы перетекает ко второй, происходит склейка этих двух страниц, а если первую запретить к индексированию при помощи мета тега, тогда вес первой страницы просто испарится в никуда склейка этих двух страниц не произойдёт. Так зачем же терять веса попусту, хотя я могу и ошибаться.

siv1987
На сайте с 02.04.2009
Offline
427
#5
AMD643200:
Что я сделал не так? Помогите, пожалуйста.

Нету тут никаких мовед перманентли, тестировалось на совместимость с htaccess-ом дле.

Свои редиректы я надеюсь удалили?

Перед этим реврайтКонд не забыли?

RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

siv1987 добавил 28.09.2011 в 01:43

Вот это

RewriteRule ^index\.(php|html)$ / [L,R=301]

Замените на

RewriteRule ^index\.(php|html)$ /? [L,R=301]

ST
На сайте с 19.09.2011
Offline
4
#6
1) В движке DLE нет 301 редиректа на основной домен сайта, например: с http://anime-news.org.ua/ на http://www.anime-news.org.ua/.
2) В движке DLE нет 301 редиректа на / с /index.php и / index.html.
3) Также возникают дубли из-за страниц вида: page/2/ и page/2, это две одинаковые страницы, которые выдают статус 200 ОК, то есть создаться море дублей, особенно учитывая, что на сайте уже более двух тысяч новостей…

Возьмите оригинальный .htaccess с инсталяции dle. Далее по порядку

1. Для того чтобы решить проблему с www и без вам нужно сделать 301 редирект. Для этого просто

.. давайте я вам скажу завтра, под рукой нет примера

2. Для того чтобы решить эту проблему добавьте в конце

RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html)\ HTTP
RewriteRule ^(.*)index\.(php|html)$ /$1 [R=301,L]

Если вам нужны там phtml - то добавляйте (php|html|phtml) и т.д. (может я даром объясняю, если вы знакомы с рег. выр.)

3. Страницы /page/2 и т.д. и т.п. /cat/page/2 - добавление в индекс поисковиков этих страниц, ни к чему хорошему не приводит! Сделайте для них

noindex,follow

Вообще сделайте

noindex,follow
для всего что касается разного дублирования контента...

В .htaccess добавляйте все в конец, запускайте firefox с firebug и смотрите отладку.

seo_trudogolik добавил 28.09.2011 в 02:07

вот вам еще пример дублированного контента (проблема с пониятием главной в DLE)

main/anime/page/1/

/anime/page/1/

seo_trudogolik добавил 28.09.2011 в 02:20

В индексе гугла по site:http://www.anime-news.org.ua первые страницы идут

page/116/ и т.д.

потом много 2011/02/13/ а также 2011/02/page/6/ и ему подобного.

Итого из 2460 страниц навскидку в основном индексе - 668

(по запросу site:http://www.anime-news.org.ua/&)

В яндексе приблизительно та же ситуация, дополнительно еще и снипеты как обычно яша не может понять (ему нужно подсказать где текст с помощью <index>). Я бы рекомендовал начать не с редиректов, а с того что я сказал...

AMD643200
На сайте с 21.04.2009
Offline
112
#7

siv1987

Добавил Ваш код в таком виде:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{HTTP_HOST} ^anime-news\.org.ua$ [NC]
RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

#Для index.php
RewriteCond %{THE_REQUEST} index\.(php|html)
RewriteRule ^index\.(php|html)$ /? [L,R=301]

#Page1
RewriteRule ^(.*)page/1/?$ /$1 [L,R=301]

#Для со слэшем и расширением
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)(?<!/)$ /$1/ [L,R=301]

Всё заработало так как надо большое спасибо.

Код добавлен в начало .htaccess лучше в начало или в конец помещать?

Вопрос по поводу ЧПУ для карты сайта:

# Карта сайта

RewriteRule ^sitemap/(.*)$ /?do=sitemap [L]

Правильно или нет? Работает нормально, но хотелось бы быть уверенным.

seo_trudogolik

Я недавно начал изучать SEO, и до этого не подозревал о дублях контента вообще, и том, что это плохо, наоборот думал, чем больше страниц, тем лучше, учитывая, что сайт был в те времена добавлен в сапу. Так как со страниц навигации и от главной типа: /page/2/ … /page/N/ и от категорий, например: /anime/page/2/ … /anime/page/N/ уже есть ссылки в сапе, я не могу добавить мета теги noindex. А на новом сайте, который начал делать недавно, эту проблему решил через robots.txt, вот содержание его:

User-agent: *

Disallow: /engine/
Disallow: /user/
Disallow: /newposts/
Disallow: /statistics.html
Disallow: /*subaction=userinfo
Disallow: /*subaction=newposts
Disallow: /*do=lastcomments
Disallow: /*do=feedback
Disallow: /*do=register
Disallow: /*do=lostpassword
Disallow: /*do=addnews
Disallow: /*do=stats
Disallow: /*do=pm
Disallow: /page/
Disallow: /2011/
Disallow: /favorites/
Disallow: /lastnews/
Disallow: /backup/
Disallow: /language/
Disallow: /cron.php
Disallow: /admin.php
Disallow: /*do=search
Disallow: /tags/
Disallow: /news/

Sitemap: http://anime-manga.org.ua/sitemap.xml

User-agent: Yandex
Disallow: /engine/
Disallow: /user/
Disallow: /newposts/
Disallow: /statistics.html
Disallow: /*subaction=userinfo
Disallow: /*subaction=newposts
Disallow: /*do=lastcomments
Disallow: /*do=feedback
Disallow: /*do=register
Disallow: /*do=lostpassword
Disallow: /*do=addnews
Disallow: /*do=stats
Disallow: /*do=pm
Disallow: /page/
Disallow: /2011/
Disallow: /favorites/
Disallow: /lastnews/
Disallow: /backup/
Disallow: /language/
Disallow: /cron.php
Disallow: /admin.php
Disallow: /*do=search
Disallow: /tags/
Disallow: /news/

Host: anime-manga.org.ua

То есть теоритически таким robots.txt я закрыл от индексации все абсолютно ссылки кроме тех, которые есть в sitemap.xml, а именно для индексации доступно только главная страница, главные страницы категорий и страницы новостей, если будут вылизать какие-то левые страницы буду добавлять дополнительные директивы в robots.txt, что бы поубивать их. ИМХО исключение через robots.txt без колупания движка сайта, что бы поставить на нужные страницы нужные мета теги, для меня удобней, может я и ошибаюсь. Что Вы скажите по поводу такого варианта скрытия ненужных страниц?

ST
На сайте с 19.09.2011
Offline
4
#8

В случае с robots.txt поисковики смогут находить новый контент только скажем через главную или через внешние ссылки. Это не означает, что что-либо будет не проиндексировано. В последних версиях DLE появилась такая полезная возможность, как автоматическое уведомление поисковых систем о новом sitemap.xml, что снижает эту вероятность. Хотя опять же все зависит от уникальности контента. С другой стороны, чем лучше страницы перелинкованы между собой, тем больше вероятность, что большая их часть будет проиндексирована, поэтому я отдаю предпочтение своему способу. Делайте так, как считаете правильнее :)

AMD643200
На сайте с 21.04.2009
Offline
112
#9

siv1987

Заметил сегодня косяк, появившийся после вставки редиректов предложенных вами. Перестали работать ссылки выйти из профиля /index.php?action=logout зарегистрироваться на сайт /index.php?do=register и т.д. и т.п. Что не так с редиректами? Код:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{HTTP_HOST} ^anime-news\.org.ua$ [NC]
RewriteRule ^(.*)$ http://www.anime-news.org.ua/$1 [R=301,L]

#Для index.php
RewriteCond %{THE_REQUEST} index\.(php|html)
RewriteRule ^index\.(php|html)$ /? [L,R=301]

#Page1
RewriteRule ^(.*)page/1/?$ /$1 [L,R=301]

#Для со слэшем и расширением
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)(?<!/)$ /$1/ [L,R=301]
siv1987
На сайте с 02.04.2009
Offline
427
#10
AMD643200:
Перестали работать ссылки выйти из профиля

После

RewriteCond %{THE_REQUEST} index\.(php|html)

Добавить

RewriteCond %{QUERY_STRING} ^$

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий