Скрипт для создания 301 редиректов со старых страниц на новые!

Автор egor1, 04-05-2015, 13:46:25

« назад - далее »

egor1Topic starter

Всем привет, может быть уже и существуют более совершенные варианты перенаправления со старых страниц на новые, но т.к. добрые люди помогли мне в этом форуме, я так же хотел бы помочь кому нибудь. Вообщем если кому то понадобится вот скрипт.


<?php
class Redirect {

private $index;
private $site;
public $uri;
public $mode;

public function __construct()
{
//Preparing for redirect
        
$this->uri $_SERVER['REQUEST_URI'];
$this->site 'http://тут ваш сайт.ru';
$this->mode 'dev';

$this->set(array(
        '/старая страница(обязательно со слешем в начале)' => '/новая страница (со слешем в начале обязательно)',
    ));
        
                
//Если вы пользуетесь CMS Joomla, а именно с Virtuemart, то при смене SEO суффикса у товара можно использовать такой простой код который перенаправляет со старой страницы с старым суффиксом на страницу с новым суффиксом, чтобы использовать эту функцию просто уберите два слеша в начале вызова функции ($this->suffix), и напишите в соотвествующих местах старый и новый суффиксы
        
                //$this->suffix('старый суффикс','новый суффикс');

$this->accept();
}

public function set($toSet)
{
    if(!empty($toSet)){
foreach($toSet as $from => $to){
     $this->index[$from] = $to;
     }
} else {
if($this->mode != 'prod'){
echo "Nothing to redirect!";
}
}
}
    
    public function 
suffix($old$new)
{
    if(eregi($old ,$this->uri)){
     if(!empty($old)&&!empty($new)){
        $tmp $this->uri;
        $url str_replace($old$new$tmp);
    
        header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' $this->site $url);
    } else {
        die('Empty suffix');
    }
    exit();
    }
}

public function accept()
{
if(!empty($this->index)){
foreach($this->index as $key => $value){
if($this->uri == $key){
    echo $this->site $value;
    header('HTTP/1.1 301 Moved Permanently');
header('Location: ' $this->site $value);
exit();
}
}
} else {
if($this->mode == 'dev'){
echo "You don't have URL's to redirect!";
}
}
}
}


Код писал сам. Пользоваться очень просто.
В файле index.php пишете такой небольшой код. (Желательно в самом начале)

require('тут имя файла в котором находится код.php');
$rm = new Redirect();


Чтобы добавить новое перенаправление достаточно продублировать кусок кода где вызывается функция set

'/старая страница(обязательно со слешем в начале)' => '/новая страница (со слешем в начале обязательно)',


У меня на сайте на Joomla этот скрипт выглядит так

<?php
class Redirect {

private $index;
private $site;
public $uri;
public $mode;

public function __construct()
{
//Preparing for redirect
        
$this->uri $_SERVER['REQUEST_URI'];
$this->site 'http://cakefactory.ru';
$this->mode 'dev';

$this->set(array(
        '/detskie-torty' => '/kategorii/detskie-torty',
        '/detskie-torty/tort_pinetki' => '/kategorii/detskie-torty/tort_pinetki.html',
        '/detskie-torty/tort_karamelnaya_princessa' => '/kategorii/detskie-torty/tort_karamelnaya_princessa.html',
        '/detskie-torty/tort-kosolapye' => '/kategorii/detskie-torty/tort-kosolapye.html',
        
        '/svadebnye-torty/tort-svadebnyi_nebesnyj_poceluj' => '/kategorii/svadebnye-torty/tort-svadebnyi_nebesnyj_poceluj.html',
        '/svadebnye-torty/tort_svadebnyi_klassicheskii' => '/kategorii/svadebnye-torty/tort_svadebnyi_klassicheskii.html',
        '/svadebnye-torty/tort_svadebnyi_krug_schastya' => '/kategorii/svadebnye-torty/tort_svadebnyi_krug_schastya.html',
        '/svadebnye-torty/tort-svadebnyi_lyubovnyi_krugovorot' => '/kategorii/svadebnye-torty/tort-svadebnyi_lyubovnyi_krugovorot.html',
        '/svadebnye-torty/tort-svadebnyi_Nezhnost' => '/kategorii/svadebnye-torty/tort-svadebnyi_nezhnost.html',
    ));
        
        
//If changed suffix (for example in Virtuemart)
        
$this->suffix('-urartu','.html');

$this->accept();
}

public function set($toSet)
{
    if(!empty($toSet)){
foreach($toSet as $from => $to){
     $this->index[$from] = $to;
     }
} else {
if($this->mode != 'prod'){
echo "Nothing to redirect!";
}
}
}
    
    public function 
suffix($old$new)
{
    if(eregi($old ,$this->uri)){
     if(!empty($old)&&!empty($new)){
        $tmp $this->uri;
        $url str_replace($old$new$tmp);
    
        header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' $this->site $url);
    } else {
        die('Empty suffix');
    }
    exit();
    }
}

public function accept()
{
if(!empty($this->index)){
foreach($this->index as $key => $value){
if($this->uri == $key){
    echo $this->site $value;
    header('HTTP/1.1 301 Moved Permanently');
header('Location: ' $this->site $value);
exit();
}
}
} else {
if($this->mode == 'dev'){
echo "You don't have URL's to redirect!";
}
}
}
}


Если возникли какие то вопросы или предложения по улучшению, пожалуйста пишите в комментарии!
  •  


nazyrov

Самые дешевые фриланс услуги
  •  


egor1Topic starter

А если сервер не Apache? Да и тут намного проще все, просто прописали старую ссылку и её новый аналог, и все!
  •  

nazyrov

Цитата: egor1 от 05-05-2015, 10:53:34А если сервер не Apache? Да и тут намного проще все, просто прописали старую ссылку и её новый аналог, и все!
Тоже верно. Не против, если у себя на блоге размещу этот код? Просто недавно тоже писал про редирект. Активную ссылку на первоисточник поставлю :)
Самые дешевые фриланс услуги
  •  

egor1Topic starter

Да ради бога :) Я же для этого сюда код запостил, чтобы пользовались. Если возникнут какие то проблемы или какие то вопросы то пишите сюда, помогу! Предложения по улучшению функционала приветствуются.
  •  


egor1Topic starter

Кто нибудь пользуется скриптом? Может у Вас есть какие то пожелания по улучшению скрипта?
  •  

nazyrov

Цитата: egor1 от 19-05-2015, 19:35:57Кто нибудь пользуется скриптом? Может у Вас есть какие то пожелания по улучшению скрипта?
На своем блоге разместил код, сам пока не пользовался (нужды нет). Как воспользуюсь, отпишусь в ветке.
Самые дешевые фриланс услуги
  •  

seoled

Цитата: nazyrov от 05-05-2015, 02:25:59
А не проще в файле htaccess прописать редирект?

Не везде стоит Apache, поэтому штука может пригодиться.
  •