Редирект для новостей DLE

12
Crazy & Co.
На сайте с 25.01.2007
Offline
221
1746

Здравствуйте, кто подскажет, как в .htaccess сделать редирект с урла site.ru/112.html (где 112 ID новости) на урл site.ru/112-stranica-s-cpu.html ? :)

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

Подскажем - редирект на php :)

RewriteRule ^(\d+).html$ r.php?$1 [L]

Crazy & Co.
На сайте с 25.01.2007
Offline
221
#2
siv1987:
Подскажем - редирект на php :)

RewriteRule ^(\d+).html$ r.php?$1 [L]

А в самом php файле что должно быть? Эту строку я прописал в .htaccess :o

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

В скрипте уже можно завершить урл, вытягивая из бд остальную часть с ЧПУ и сделать 301 редирект на новый адрес.

например для дле:


#alt_name - сео_тайтл
#dle_post - таблица
$row = mysql_query( 'SELECT id,alt_name FROM dle_post where id='.mysql_escape_string($_SERVER['QUERY_STRING']) );
$cpu = mysql_fetch_assoc($row);

$url = $cpu['id'].'-'.$cpu['alt_name'].'.html';

#редирект
header( 'Location: /'.$url, true, 301 );
exit;

Получим ссылку /123-тайтл-новости

Crazy & Co.
На сайте с 25.01.2007
Offline
221
#4

Вот прописал я в файле r.php такой код:


<?
#alt_name - сео_тайтл
#dle_post - таблица
define ("DBHOST", "localhost");
define ("DBNAME", "site");
define ("DBUSER", "site");
define ("DBPASS", "parol");
$row = mysql_query( 'SELECT id,alt_name FROM dle_post where id='.mysql_escape_string($_SERVER['QUERY_STRING']) );
$cpu = mysql_fetch_assoc($row);

$url = $cpu['id'].'-'.$cpu['alt_name'].'.html';

#редирект
header( 'Location: /'.$url, true, 301 );
exit;
?>

#alt_name - сео_тайтл

#dle_post - таблица

Я не совсем понял каким образом надо подключить таблицы. :o

siv1987
На сайте с 02.04.2009
Offline
427
#5
Вот прописал я в файле r.php такой код:
Я не совсем понял каким образом надо подключить таблицы

:)

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

Ладно, вот полностью рабочий код


<?php
#проверяем если ид числовой
if( !is_numeric($_SERVER['QUERY_STRING']) )
{
echo ' Недопустимый формат ID';
exit;
}

#mysql_host - mysq хост
#login - логин от бд
mysql_connect("mysql_host", "login", "pass")
or die ('Could not connect to MySQL');

#db - имя базы данных
mysql_select_db ("db")
or die ('Could not select database');

$row = mysql_query( 'SELECT id,alt_name FROM dle_post where id='.mysql_escape_string($_SERVER['QUERY_STRING']) );
$cpu = mysql_fetch_assoc($row);

if( empty($cpu['id']) )
{
echo ' ID пуст ';
exit;
}

$url = $cpu['id'].'-'.$cpu['alt_name'].'.html';
mysql_close();

header( 'Location: /'.$url, true, 301 );
exit;
?>

После отладки, если ИД не пройдет проверку можно редиректить всех на главную страницу сайта.

Crazy & Co.
На сайте с 25.01.2007
Offline
221
#6
siv1987:
:)
Таблицы выбираются во время sql запроса, подключится нужно к mysql и выбрать базу данных.

Ладно, вот полностью рабочий код

<?php
#проверяем если ид числовой
if( !is_numeric($_SERVER['QUERY_STRING']) )
{
echo ' Недопустимый формат ID';
exit;
}

#mysql_host - mysq хост
#login - логин от бд
mysql_connect("mysql_host", "login", "pass")
or die ('Could not connect to MySQL');

#db - имя базы данных
mysql_select_db ("db")
or die ('Could not select database');

$row = mysql_query( 'SELECT id,alt_name FROM dle_post where id='.mysql_escape_string($_SERVER['QUERY_STRING']) );
$cpu = mysql_fetch_assoc($row);

if( empty($cpu['id']) )
{
echo ' ID пуст ';
exit;
}

$url = $cpu['id'].'-'.$cpu['alt_name'].'.html';
mysql_close();

header( 'Location: /'.$url, true, 301 );
exit;
?>


После отладки, если ИД не пройдет проверку можно редиректить всех на главную страницу сайта.

Спасибо, только у меня по-прежнему редиректит на site.ru/-.html :o

vandamme
На сайте с 30.11.2008
Offline
675
#7

так надо одну страницу редиректить или по маске много страниц?

siv1987
На сайте с 02.04.2009
Offline
427
#8
vandamme:
так надо одну страницу редиректить или по маске много страниц?

Вот блин, а ведь верно, сколько там страниц для редиректа то?

Если их несколько, можно просто для каждой прописать свой редирект отдельно. Или решили перейти с одного вида чпу на другой?

Хз, я тестил у себя - работает. Поковыряйте базу, может поля не совпадают.

Crazy & Co.
На сайте с 25.01.2007
Offline
221
#9
vandamme:
так надо одну страницу редиректить или по маске много страниц?

Много, штук 700 :)

siv1987:

Хз, я тестил у себя - работает. Поковыряйте базу, может поля не совпадают.

Странно, вроде все заполнил правильно. :(

<?php 

#проверяем если ид числовой
if( !is_numeric($_SERVER['QUERY_STRING']) )
{
echo ' Недопустимый формат ID';
exit;
}

#mysql_host - mysq хост
#login - логин от бд
mysql_connect("localhost", "kino", "moyparol")
or die ('Could not connect to MySQL');

#db - имя базы данных
mysql_select_db ("kino")
or die ('Could not select database');

$row = mysql_query( 'SELECT id,alt_name FROM dle_post where id='.mysql_escape_string($_SERVER['QUERY_STRING']) );
$cpu = mysql_fetch_assoc($row);

if( empty($cpu['id']) )
{
echo ' ID пуст ';
exit;
}

$url = $cpu['id'].'-'.$cpu['alt_name'].'.html';
mysql_close();

header( 'Location: /'.$url, true, 301 );
exit;
?>
siv1987
На сайте с 02.04.2009
Offline
427
#10
Странно, вроде все заполнил правильно.

Еще более странно откуда в последнем примере пустой редирект, там либо есть, либо даже если запрос не правильный должен вывести сообщение об ошибке.

Может скините урл в личку? :)

12

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