Вопрос по редиректу

123
siv1987
На сайте с 02.04.2009
Offline
427
#11
niko_viktor:
Вижу например ситуацию описанную выше и добавляю правило в robots.txt

Ну да, для других ситуации будете добавлять другие правила. С htaccess-ом тоже самое будет.

niko_viktor:
Но не работает. Синтаксис естественно порчу т.к. не могу его понять. Уже больше месяца мучаюсь. Пробую и так и эдак. Даже уже пытался кинуть эту затею... Но как увижу в очередной раз, что в Гугле снова множество дублей, аж плохо... Откуда он только берет эти не правильные адреса?..

Добавьте шаблон в роботс и не мучайтесь.

niko_viktor:
Пробовал такие варианты:

QUERY_STRING (строка запроса) не обрабатывается в RewriteRule. Ее можно проверить только с помощью RewriteCond

RewriteCond %{QUERY_STRING} !^$

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

niko_viktor
На сайте с 11.06.2009
Offline
41
#12
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.+\.html)$ /$1? [R=301,L]

К сожалению всё равно выдаёт дубль страницы с ответом 200

KNEP.ru (https://knep.ru/) - мой блог Кнеп.ру
siv1987
На сайте с 02.04.2009
Offline
427
#13

1. Не забывать и про RewriteEngine On

2. Если есть реврайты, добавлять надо перед ними

3. Проверял, редирект рабочий. Про кеширование браузером ответов тоже стоит помнить.

niko_viktor
На сайте с 11.06.2009
Offline
41
#14

Проверил сервисом для проверки http-аголовков - работает, спасибо.

В итоге, теперь участок моего файла .htaccess, отвечающий за все редиректы выглядит так:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{QUERY_STRING} !^$

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

# ЧПУ

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

#Перенаправление для главной страницы

RewriteCond %{HTTP_HOST} ^knep.ru

RewriteRule (.*) http://www.knep.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/

RewriteRule ^index\.html$ http://www.knep.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://www.knep.ru/ [R=301,L]

</IfModule>

Возникли ещё 2 вопроса:

1. Кроме адресов вида .html?post=9890 с которыми вы помогли успешно побороться, встречаются также адреса типа .html100 Можно ли модифицировать ваши строки так, чтобы отбрасывались не только динамические символы типа ?, но всё что расположено после .html, будь то цифры, буквы или любые другие знаки включая знак процента (и ещё Бог их знает какие могут возникнуть)? Чтобы адреса с .html заканчивались именно на это расширение без всяких приставок.

2. При наборе полного адреса страницы без www - редиректит на главную страницу с www. Как сделать, чтобы редиректило не на главную, а на полный адрес страницы но с www?

siv1987
На сайте с 02.04.2009
Offline
427
#15

RewriteCond %{QUERY_STRING} !^$

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

RewriteRule ^(.+\.html). /$1 [R=301,L]

2. Все редиректы надо добавлять перед реврайтами, в данном случае перед

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

если точно не уверены где есть реврайты, то помещать редиректы можно сразу за RewriteEngine

niko_viktor
На сайте с 11.06.2009
Offline
41
#16

Спасибо огромное, всё заработало! Вы просто гений-программист. Еще раз спасибо.

---------- Добавлено 17.07.2013 в 13:33 ----------

Оказывается, таким способом некоторые не честные веб-мастера борются с конкурентами.

Вот нашел интересную статью - точно про мой случай.

Смысл заключается в том, что покупаются ссылки с точным вхождением на множество страниц конкурента с разными окончаниями.

Например: если оригинальная страница в ТОПе заканчивалась на имя.html, то покупается десяток ссылок на страницы вида имя.html?p=1 имя.html?p=2 имя.html?p=3

Получается много дублей одной страницы. Часто Гугл накладывает за это фильтр Панда или просто ранжирует ниже. Также часто поисковики меняют исходную релевантную страницу в выдаче. А потом просто позиции вылетают за 50+

Теперь, благодаря siv1987 существует способ бороться с такими внешними факторами, в файле .htaccess добавляем:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{QUERY_STRING} !^$

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

RewriteRule ^(.+\.html). /$1 [R=301,L]

</IfModule>

Также в соответствии с документацией Google можно порекомендовать перед закрывающим тэгом HEAD добавить:

<link rel="canonical" href="адрес_релевантной_страницы" />

niko_viktor
На сайте с 11.06.2009
Offline
41
#17

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

Я, наверное как и все вокруг, ставлю внешние ссылки через php-файл редиректа (rd.php) с таким вот содержимым:

<?

$uri = "";
if (array_key_exists("QUERY_STRING", $_SERVER)) {
$uri = $_SERVER["QUERY_STRING"];
}
header("Location: ".$uri);
?>

Вот решил спросить у наших гуру: как сделать, чтобы обработка редиректа шла не через php-файл, а например через .htaccess?

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

siv1987
На сайте с 02.04.2009
Offline
427
#18
niko_viktor:
Вот решил спросить у наших гуру: как сделать, чтобы обработка редиректа шла не через php-файл, а например через .htaccess?

Смысл, разницы никакой не будет.

niko_viktor
На сайте с 11.06.2009
Offline
41
#19

Моя логика была в том, что увеличение скорости реагирования редиректа произойдет всвязи с тем, что браузеру не придется грузить php-файл, т.к. процесс перенаправления будет осуществляться на уровне http заголовков.

niko_viktor
На сайте с 11.06.2009
Offline
41
#20

siv1987, здравствуйте.

У меня появилась потребность реализовать поддомены средствами .htaccess

Чтобы файлы из папки имя_сайта/scripts/... были доступны по адресу scripts.имя_сайта/...

Пробовал как написано здесь: /ru/forum/618353

и здесь:

но ничего не помогает. Я уже даже создавал A запись в DNS, но всё равно... Использую VDS на fastvps (к сведению).

123

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