Прошу помощи по mod_rewrite

Boss

Продвинутый (IV)
Сообщения
43
Симпатии
11
Баллы
186
Тут вот возникла проблема: как-то случайно на главной странице в конце ссылки не поставил слэш: _http://site.ru/page-bad , и Яндекс а потом и Гугл стали индексировать страницы, которых не должно быть. Что-то вроде _http://site.ru/page1/page-bad/ _http://site.ru/page2/page-bad/ _http://site.ru/page3/page-bad/ ну и т.д.
Они их сначала индексируют, а потом через несколько дней помечают как дубли и исключают из индекса.
Вот я и задумался, как сделать с помощью mod_rewrite в .htaccess перенаправление со ссылок второго уровня на первый, т.к CMS сама генерит только страницы первого уровня.
Т.е. нужно сделать, чтобы по маске страницы _http://site.ru/page1/page-bad/ переадресовывались на _http://site.ru/page1/ при обращении к ним поисковых ботов.
 
Строго говоря слеш то и не нужен, потому что
http://site.ru/page-bad/ - папка
http://site.ru/page-bad - страница
поэтому странная какая то CMS

по сути вопроса
Можно через index.php который в корне, сделать редирект, в самое начало вставь

PHP:
$uri = $_SERVER['REQUEST_URI'];

$parts = explode('/',$uri);
$parts = array_filter($parts);
if (current($parts)) {
    header("Location: https://site.ru/".current($parts)."/", true, 301);
}
 
  • Мне нравится
Симпатии: Boss
Строго говоря слеш то и не нужен, потому что
http://site.ru/page-bad/ - папка
http://site.ru/page-bad - страница
поэтому странная какая то CMS

по сути вопроса
Можно через index.php который в корне, сделать редирект, в самое начало вставь

PHP:
$uri = $_SERVER['REQUEST_URI'];

$parts = explode('/',$uri);
$parts = array_filter($parts);
if (current($parts)) {
    header("Location: https://site.ru/".current($parts)."/", true, 301);
}
Если я правильно понял, то здесь идет речь о переадресации со страницы без слэша, на страницу со слэшем?
С этим все в порядке, сейчас все настроено. Мне нужно сделать так, чтобы при обращении к любой странице второго уровня шла переадресация на страницу первого уровня.
Страницы _http://site.ru/page1/page-bad/ переадресовывались на _http://site.ru/page1/
 
А ты попробовал?
Вставил запись в index.php. Главная страница загружается нормально, а внутренние выдают ошибку:
"Сайт site.ru выполнил переадресацию слишком много раз."
В DevTools вот:
Код:
VM9:7146 crbug/1173575, non-JS module files deprecated.
(anonymous) @ VM9:7146
 
Последнее редактирование:
Но что интересно, переадресация происходит, http://site.ru/page1/page-bad/ на http://site.ru/page1/
Это уже радует. Только ошибка все равно есть. Может это проблема самой CMS или настройки сервера?
 
Поправить чуть код надо вот так

PHP:
$uri = $_SERVER['REQUEST_URI'];

$parts = explode('/',$uri);
$parts = array_filter($parts);
if (current($parts) && (count($parts) > 1) ) {
    header("Location: https://site.ru/".current($parts)."/", true, 301);
}

получается он index.php на себя заворачивает
 
  • Мне нравится
Симпатии: Boss
Поправить чуть код надо вот так

PHP:
$uri = $_SERVER['REQUEST_URI'];

$parts = explode('/',$uri);
$parts = array_filter($parts);
if (current($parts) && (count($parts) > 1) ) {
    header("Location: https://site.ru/".current($parts)."/", true, 301);
}

получается он index.php на себя заворачивает
Супер! Работает!
Спасибо!
 
Поправить чуть код надо вот так

PHP:
$uri = $_SERVER['REQUEST_URI'];

$parts = explode('/',$uri);
$parts = array_filter($parts);
if (current($parts) && (count($parts) > 1) ) {
    header("Location: https://site.ru/".current($parts)."/", true, 301);
}

получается он index.php на себя заворачивает
А можно еще попросить чтобы после слэша, когда идет знак "?" обрезалось, а то заметил, что Яндекс стал такие страницы индексировать...
скажем что-то типа: https://site.ru/?fb_comment_id=963785006975092_996967496990145, точнее система выдает ответ "200"
 
Может через robots лучше
Код:
Disallow: /?*
 
Такие вещи лучше делать на уровне сервера
Например, переадресация через nginx с кодом 301
Код:
server {
    rewrite /([-a-zA-Z0-9_]*)/(.*) /$1/ permanent;
}
 
Последнее редактирование:
Назад
Верх