htacess и дубли страниц

EO
На сайте с 10.05.2005
Offline
114
807

Здравствуйте!

Помогите с удалением дублей страниц.

Есть файл .htacess с правилами для ЧПУ:

RewriteRule ^articles/(?:article-|)([0-9]+)\.html$ /articles/index.php?go=article&id=$1 [L]

RewriteRule ^prog/([a-zA-Z0-9_]+)-([0-9]+)\.html$ /prog.php?prog_id=$2&t_name=$1 [L]

Т.е. вот такие адреса страниц работают:

/articles/article-123.html

/prog/progname-123.html

А гугл еще индексирует такие адреса (по ним также открываются страницы):

/articles/index.php?go=article&id=123 (обращение без ЧПУ)

/prog/progname-123.html?iframe=true&width=900&height=450 (какой-то мусор в конце адреса)

Подскажите, пожалуйста, как сделать страницы недоступными или редирект на правильные адреса?

Пробовал в php ловить переменную: iframe - что-то не получается. Она же наверное теряется при обработке ЧПУ...

Гугл этот дурацкий iframe подставил на сотни и тысячи страниц-дублей.

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
PN
На сайте с 22.08.2012
Offline
103
#1

Это, как я считаю, главная ошибка при создании движка. Нужно по хорошему все запросы слать на файлы без ?параметры, т.е. на /articles/index.php, а там уже анализировать REQUEST_URI, но раз уж у вас так сделано, то теперь анализируйте $_SERVER['REQUEST_URI'], либо вообще в htaccess запретите страницы с ?go=article и iframe=, перенаправляя их на 404.php, в котором будет header 404 ошибки.

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
EO
На сайте с 10.05.2005
Offline
114
#2
proksey-net:
Это, как я считаю, главная ошибка при создании движка. Нужно по хорошему все запросы слать на файлы без ?параметры, т.е. на /articles/index.php, а там уже анализировать REQUEST_URI, но раз уж у вас так сделано, то теперь анализируйте $_SERVER['REQUEST_URI'], либо вообще в htaccess запретите страницы с ?go=article и iframe=, перенаправляя их на 404.php, в котором будет header 404 ошибки.

Движок конечно не идеальный...но уже не переделаешь весь...

А как описать эти конструкции в акцессе?

Понимаю, что их ловить надо, но вот не сумел сам описать это выражением регулярным.

---------- Добавлено 08.04.2015 в 12:07 ----------

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

RewriteCond %{REQUEST_URI} iframe=true

RewriteRule ^prog/(.*) / [R=301,L]

Толку - ноль...

J
На сайте с 20.02.2014
Offline
120
jkm
#3

В %{THE_REQUEST} будет строка вида "GET /articles/index.php?go=article&id=123 HTTP/1.1"


RewriteCond %{THE_REQUEST} \?go=article&id=([^\ &]+)
RewriteRule ^ /articles/article-%1.html? [R=301,L]

RewriteCond %{THE_REQUEST} \ (/prog/[^?]+\?)
RewriteRule ^ %1 [R=301,L]

PN
На сайте с 22.08.2012
Offline
103
#4


RewriteRule ^/prog/(.*)\?(.*) /prog/$1

так тоже нет? Без всяких RewriteCond

siv1987
На сайте с 02.04.2009
Offline
427
#5
proksey-net:
так тоже нет? Без всяких RewriteCond

Нет. Без RewriteCond не обойтись в данном случае.

PN
На сайте с 22.08.2012
Offline
103
#6
siv1987:
Нет. Без RewriteCond не обойтись в данном случае.

Вы уверены? По-моему мой вариант вполне рабочий:)

EO
На сайте с 10.05.2005
Offline
114
#7
proksey-net:

RewriteRule ^/prog/(.*)\?(.*) /prog/$1


так тоже нет? Без всяких RewriteCond

Это не работает.

---------- Добавлено 09.04.2015 в 06:34 ----------

jkm:
В %{THE_REQUEST} будет строка вида "GET /articles/index.php?go=article&id=123 HTTP/1.1"

RewriteCond %{THE_REQUEST} \?go=article&id=([^\ &]+)
RewriteRule ^ /articles/article-%1.html? [R=301,L]

RewriteCond %{THE_REQUEST} \ (/prog/[^?]+\?)
RewriteRule ^ %1 [R=301,L]

Это замечательно работает!

Только во втором случае так заработало:

RewriteCond %{THE_REQUEST} /articles/index.php\?go=article&id=([^\ &]+)

Добавил: /articles/index.php

Ура, проблема решена! Спасибо всем за помощь!

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