Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
1

301 редирект внутренних страниц

24.12.2016, 07:15. Просмотров 712. Ответов 21
Метки нет (Все метки)

Доброго времени суток.

Допустим есть страница сайта такого вида:
сайт/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-1 (сайт/страница-1)
Пытаюсь сделать 301 редирект на
сайт/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-2 (сайт/страница-2)

Изначально страница имела такой вид:
сайт/svname.php?name=%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-1 .
Но через .htaccess убрал svname.php?name= через RewriteRule ^([^/\.]+)/?$ svname.php?name=$1 [L]. Расширение .php тоже убрал через .htaccess.

Теперь не могу придумать, как редиректнуть.

Пробовал сделать через PHP, вытянув с таблицы ссылку:
PHP
1
2
3
4
5
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://сайт/'".$row ['link'];."'");
exit();
?>
- но не работает ( код 500 выдает).

В идеале хотелось бы сделать именно на PHP, чтобы не захламлять .htaccess большим количеством 301-х, но буду рад любой помощи!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 07:15
Ответы с готовыми решениями:

301 редирект для всех страниц
Есть страницы вида site.ru/folder/page.php?id=10...

301 редирект
Доброго дня всем. Сайт перенесли на другой домен. На старом поставили...

Сделать редирект 301
Здравствуйте! Не знаю правильно ли я выбрала раздел, прошу не ругать за...

Пытаюсь сделать редирект 301
Пытаюсь сделать редирект 301 Передо мной стоит задача сообщить поисковикам,...

Как сделать 301 редирект с двойного слэша на одинарный
день добрый всем! подскажите, как сделать 301 редирект с двойного слэша на...

21
strannik-ps
4 / 4 / 2
Регистрация: 19.03.2016
Сообщений: 32
24.12.2016, 09:12 2
PHP
1
2
3
header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently');
header('Location: http://сайт/'.$row['link']);
exit();
1
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 10:58  [ТС] 3
strannik-ps, перекидывает на главную $row['link'] походу вообще не видит.
0
strannik-ps
4 / 4 / 2
Регистрация: 19.03.2016
Сообщений: 32
24.12.2016, 11:05 4
Цитата Сообщение от mat777 Посмотреть сообщение
перекидывает на главную $row['link'] походу вообще не видит.
Значит массив пустой, копайтесь в $row['link'] вам нужно вытащить link из базы или где он там у вас...
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 11:15  [ТС] 5
Цитата Сообщение от strannik-ps Посмотреть сообщение
нужно вытащить link из базы или где он там у вас
Да из базы. массив не пустой. если в него добавляю часть с http://сайт/
PHP
1
header('Location: '.$row['link']);
редирект срабатывает но страница становиться пустой
0
miketomlin
Заблокирован
24.12.2016, 11:26 6
Так значит ошибка в целевой странице.

Добавлено через 2 минуты
Как вы глядят ссылки в БД? Судя по тому, что вы писали выше, они должны быть относительными. Хотя бы слеш добавьте в начало.

Добавлено через 1 минуту
...в команде выше.
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 11:42  [ТС] 7
На странице все генерируется через переменную $name в которой лежит чпу (в таблице "chplink") вида тема-два-тра-та-та-2016. link-отдельное поле только для редиректа нужной записи.
Выводится все благодаря коду ниже (писал его не я, принцип его работы не особо понял)
PHP
1
$name = isset($_GET['name']) ? $_GET['name'] : null;
Когда добавляю код редиректа, на всех страницах, не только на нужной, либо пусто либо ошибка либо все перенаправляются на главную.
0
strannik-ps
4 / 4 / 2
Регистрация: 19.03.2016
Сообщений: 32
24.12.2016, 11:53 8
Посмотрите что выдает $row['link']
PHP
1
var_dump($row['link']);
и уже будет понятней какого вида ссылка там и куда ведет
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 12:23  [ТС] 9
Выдаёт string(31) "%D1%82%D0%B5%D0%BC%D0%B0-1-2016" как и записано в бд
0
miketomlin
Заблокирован
24.12.2016, 12:30 10
Слеш добавьте в заголовок Location, как я выше написал.

Страница /%D1%82%D0%B5%D0%BC%D0%B0-1-2016 сама по себе открывается?
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 12:55  [ТС] 11
Да страница работает. 2-я тоже есть (на которую нужно перенаправлять). А вот на счет слеша, не догнал куда его ставить? (почти сутки бьюсь с 301-м, видимо подустал)
0
strannik-ps
4 / 4 / 2
Регистрация: 19.03.2016
Сообщений: 32
24.12.2016, 12:57 12
Цитата Сообщение от mat777 Посмотреть сообщение
А вот на счет слеша, не догнал куда его ставить?
PHP
1
header('Location: /'.$row['link']);
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 13:35  [ТС] 13
Просто перекидывает на главную, причем со всех страниц. Было что то похожее на переадресацию, когда ссылку полностью закинул в 'link' - но страница полностью пустая, и получилось только для этой страницы, остальные все на главную идут.
Кажется все должно быть просто и по логике все совпадает. Наверно что то мы упускаем. И да, благодарю что откликнулся, хоть понемногу с мёртвой точки сдвигаюсь)
0
miketomlin
Заблокирован
24.12.2016, 13:40 14
Кэш браузера почистите и не выставляйте пока 301-статус.
0
Jodah
Эксперт PHP
2847 / 2479 / 1056
Регистрация: 01.08.2012
Сообщений: 8,771
24.12.2016, 13:54 15
mat777,
PHP
1
2
$link = '%D1%82%D0%B5%D0%BC%D0%B0-1-2016';
header('Location: /' . $link);
А так работает?

Кстати, судя по первому посту, в ссылке не хватает -1 (номер страницы), может так?
PHP
1
2
$link = '%D1%82%D0%B5%D0%BC%D0%B0-1-2016';
header('Location: /' . $link . '-1');
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
24.12.2016, 15:16  [ТС] 16
Jodah, эффект тот же - редирект со всех страниц на главную, то есть Location: / применяется для всех страниц, не только для той что нужно, так как страница изначально имеет вид /svname.php?name=%D1%82%D0%B5%D0%BC%D0%B0-1-2016 (писал в первом посте).
Цитата Сообщение от Jodah Посмотреть сообщение
в ссылке не хватает -1 (номер страницы)
название - просто пример.

Наверно придется всё таки искать через .htaccess, хотя тоже пробовал кучу вариантов и пока не подобрал рабочий.
0
miketomlin
Заблокирован
24.12.2016, 16:00 17
Вы сделали то, что я в последнем посте написал?

Причем тут .htaccess, если вы говорите, что конечная страница открывается? Для редиректа имеют значение только «внешние адреса». И только внутри вашего скрипта вы работаете с входными внутренними адресами, результатом внутреннего перенаправления. Можно на всякий случай добавить перед правилом условие RewriteCond %{REQUEST_FILENAME} !-f, но по идее вы в маске правила указали, что не должно быть точек, поэтому зацикливания не должно быть.

Добавлено через 4 минуты
Еще интересно, как вы делаете различие в обработке адресов конечных страниц, и тех адресов, по которым выполняется перенаправление.

Добавлено через 11 минут
Да, проверил, правило в стартовом посте рабочее.
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
25.12.2016, 20:17  [ТС] 18
miketomlin, да конечная страница открывается но полностью пустой, при этом со всех остальных кидает на главную. Если бы можно было весь этот php код c Location можно было закинуть прямо в таблицу в нужную запись, но так не работает (выводит закоментированым).
Цитата Сообщение от miketomlin Посмотреть сообщение
Можно на всякий случай добавить перед правилом условие RewriteCond %{REQUEST_FILENAME} !-f, но по идее вы в маске правила указали, что не должно быть точек, поэтому зацикливания не должно быть.
на счет этого не понял, куда его добавить?
0
miketomlin
Заблокирован
25.12.2016, 20:39 19
Раз такое дело, значит, у вас более глубокая проблема. Нужно нормально разграничить обработку запросов к целевым страницам и по тем адресам, по которым вы делаете редирект.

Цитата Сообщение от mat777 Посмотреть сообщение
на счет этого не понял, куда его добавить?
Условия всегда пишутся перед правилом, но, повторяю, ваше правило вполне рабочее.

Добавлено через 9 минут
Можно завести отдельное поле для хранение типа page/link и в поле, где обычно хранится контент страницы, хранить ссылку, когда установлен тип link. В зависимости от типа отображать страницу, либо делать редирект.
0
mat777
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 135
25.12.2016, 21:35  [ТС] 20
Цитата Сообщение от miketomlin Посмотреть сообщение
Нужно нормально разграничить обработку запросов к целевым страницам
Как это можно сделать?
0
25.12.2016, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2016, 21:35

Редирект отдельных страниц сайта
Есть 2 домена. Был переделан сайт 1.ru - старый сайт 2.ru - новый сайт Я...

Как сделать редирект с несуществующих страниц
В общем сайт на инклюдах. На нескольких страницах есть ссылки на пока...

Настроить 301 редирект
есть адрес http://site.ru/?&amp;getparam=1&amp;getparam=2 как редиректить с ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru