Код: Выделить всё
if(($res = $view->fetch()) !== false) {
Код: Выделить всё
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
http://simpla-tuning.com/redirectsmakki писал(а):Раз есть опыт, хотелось увидеть пример реализации
makki писал(а):Моя идея такова. В файле index.php после строчки...
Полную уверенность дает только страховой полис...makki писал(а):Хочется быть уверенным, что я ничего не пропустил, чтобы не потерять вес ссылок.
Код: Выделить всё
<?php
require_once('Okay.php');
class Redirect extends Okay {
public function get_redirect($current_uri) {
$query = $this->db->placehold("SELECT id, old_url, new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
if($this->db->query($query))
return $this->db->result();
else
return false;
}
}
Код: Выделить всё
'languages' => 'Languages',
Код: Выделить всё
'redirect' => 'Redirect',
Код: Выделить всё
'languages'
Код: Выделить всё
,'redirect'
Код: Выделить всё
CREATE TABLE `s_redirects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`old_url` varchar(255) NOT NULL DEFAULT '',
`new_url` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `old_url` (`old_url`),
KEY `new_url` (`new_url`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Код: Выделить всё
if(($res = $view->fetch()) !== false) {
Код: Выделить всё
// redirect 301
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$redirect = $view->redirect->get_redirect($current_uri);
if($current_uri == $redirect->old_url) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$redirect->new_url);
exit;
}
}
Код: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
$new_url = $view->db->result('new_url');
if($new_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$new_url);
exit;
}
}
korshunov писал(а):// redirect 301
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$redirect = $view->redirect->get_redirect($current_uri);
if($current_uri == $redirect->old_url) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$redirect->new_url);
exit;
}
}
Код: Выделить всё
CREATE TABLE `ok_redirects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`old_url` varchar(255) NOT NULL DEFAULT '',
`new_url` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `old_url` (`old_url`),
KEY `new_url` (`new_url`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=utf8;
Код: Выделить всё
if(($res = $view->fetch()) !== false) {
Код: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
$new_url = $view->db->result('new_url');
if($new_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$new_url);
exit;
}
}
makki писал(а):В какой-то из версий линейки 2.0 поменяли префикс таблиц базы данных с s_ на ok_
Поэтому вам надо его поменять в базе данных. Если не знаете как, тогда удалите таблицу s_redirects и создайте новую с помощью такого запроса.Код: Выделить всё
CREATE TABLE `ok_redirects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`old_url` varchar(255) NOT NULL DEFAULT '',
`new_url` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `old_url` (`old_url`),
KEY `new_url` (`new_url`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=utf8;
Помимо этого, все что нужно, это как предложил korshunov в файле index.php перед строчкойКод: Выделить всё
if(($res = $view->fetch()) !== false) {
ВставитьКод: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
$new_url = $view->db->result('new_url');
if($new_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$new_url);
exit;
}
}
Julius123 писал(а):У меня какая-то ошибка, например мне нужно сделать редирект с одной категории на другую и если я ставлю old_url - catalog/zhenskie-klatchi, а new_url - catalog/sumki то меня перебрасывает на неправильный URL https://site.ru/catalog/catalog/sumki
makki писал(а):Julius123 писал(а):В new_url вместо catalog/sumki пишите /catalog/sumki
Код: Выделить всё
if($new_url=='/') {
header('Location: '.$view->config->root_url);
} else {
header('Location: '.$view->config->root_url.'/'.$new_url);
}
makki писал(а):Тогда возникает вопрос как редиректить на главную. Я обычно в new_url ставил /
Но при вашем подходе новая ссылка при редиректе на главную будет выглядеть так site.com//
Тогда надо еще дополнительное условие
Если new_url будет пустым, тогда не сработает условие if($new_url){korshunov писал(а):Я бы для этого случая прописал new_url='', то есть пустым. Такой прием применяется в админке в страницах для редактирования главной - все же некое единообразие для админа...
СпасибоИ вместо условия написать покороче
header('Location: '.trim($view->config->root_url.'/'.$new_url,'/'));
Код: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
if($res = $view->db->result()){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.trim($view->config->root_url.'/'.$res->new_url,'/'));
exit;
}
}
makki писал(а):В какой-то из версий линейки 2.0 поменяли префикс таблиц базы данных с s_ на ok_
Поэтому вам надо его поменять в базе данных. Если не знаете как, тогда удалите таблицу s_redirects и создайте новую с помощью такого запроса.Код: Выделить всё
CREATE TABLE `ok_redirects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`old_url` varchar(255) NOT NULL DEFAULT '',
`new_url` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `old_url` (`old_url`),
KEY `new_url` (`new_url`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=utf8;
Помимо этого, все что нужно, это как предложил korshunov в файле index.php перед строчкойКод: Выделить всё
if(($res = $view->fetch()) !== false) {
ВставитьКод: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
$new_url = $view->db->result('new_url');
if($new_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$new_url);
exit;
}
}
Код: Выделить всё
if($_SERVER['REQUEST_URI'] !== '/') {
$current_uri = trim($_SERVER['REQUEST_URI'], '/');
$view->db->query("SELECT new_url FROM __redirects WHERE old_url=? LIMIT 1", $current_uri);
$new_url = $view->db->result('new_url');
if($new_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$new_url);
exit;
}
}
Вернуться в «Полезные решения для OkayCMS»
Сейчас этот раздел просматривают: 4 гостя