[DLE 9.5] Как убрать ID новости из URLa?

DeFunes
На сайте с 17.08.2009
Offline
74
3954

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

Подскажите, как сделать так, чтобы в URL не выводился ID новости.

p.s. DLE 9.5

sunca
На сайте с 05.12.2010
Offline
77
#1

а зачем? url могут повторятся без id, а это не есть гуд

matveich
На сайте с 20.02.2007
Offline
97
#2

Актуально. Тоже интересует как убрать id из новости.

P/S Названия у меня не повторяются

Государственные лотереи онлайн (http://goo.gl/KiCsb3)
U2
На сайте с 12.06.2012
Offline
19
#3

Как убрать ID новости из адреса:

1. Открываем файл /engine/engine.php и заменяем код:


// ################ Новость целиком #################
if ($subaction != '' or $newsid) {
if (! $newsid) $sql_news = "SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM " . PREFIX . "_post WHERE alt_name ='$news_name' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 0,1";
else $sql_news = "SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM " . PREFIX . "_post where id = '$newsid'";

if ($subaction == '') $subaction = "showfull";
}
}

на


// ################ Новость целиком #################
if ($subaction != '' or $_GET['newsid']) {
if (! $_GET['newsid']) $sql_news = "SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM " . PREFIX . "_post WHERE alt_name ='$news_name' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 0,1";
else $sql_news = "SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM " . PREFIX . "_post where alt_name = '{$_GET['newsid']}'";

if ($subaction == '') $subaction = "showfull";
}
}

2. В файлах /engine/modules/show.short.php, show.custom.php, topnews.php ищем код:


if( $row['category'] and $config['seo_type'] == 2 ) {

$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";

} else {

$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";

}

} else {

$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}

} else {

$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];

}

и заменяем на:


if( $row['category'] and $config['seo_type'] == 2 ) {

$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['alt_name'] . ".html";

} else {

$full_link = $config['http_home_url'] . $row['alt_name'] . ".html";

}

} else {

$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}

} else {

$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['alt_name'];

}

3. Открываем файл /.htaccess и ищем код:

RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2 [L]

заменяем на:

RewriteRule ^([^.]+)/(.*).html(/?)+$ index.php?newsid=$2 [L]

ищем:

RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1 [L]

заменяем на:

RewriteRule ^(.*).html(/?)+$ index.php?newsid=$1 [L]

Что бы со старых типов ссылок шло перенаправление на ссылки нового вида необходимо открыть файл /engine/modules/show.full.php, найти код:

@header( "HTTP/1.0 404 Not Found" ); 

msgbox( $lang['all_err_1'], $lang['news_err_12'] );
}

и заменить на:

preg_match("/([0-9]*)-(.+?)\.html$/i", $_SERVER["REQUEST_URI"], $res); 

if(intval($res[1]) > 0){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$config['home_url'].$res['2'].'.html');
exit;
}

найти:

$news_found = TRUE;

ниже добавить:

if($config['allow_alt_url'] == "yes"){


preg_match( '/'.$row['id'].'-(.*?).html/is' , $_SERVER["REQUEST_URI"] , $parse_alt_name );

if($row['alt_name'] != trim($parse_alt_name[1]) )$news_found = FALSE; if( !$news_found ) break;

}

вставляем в самый конец файла /.htaccess следующий код:

# Сам пост

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day= $3&news_page=$4&cstart=$5&news_name=$6 [L]

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day= $3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day= $3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day= $3&news_name=$4 [L]

RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3 [L]
RewriteRule ^([^.]+)/(.*).html(/?)+$ index.php?newsid=$2 [L]

RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2 [L]
RewriteRule ^(.*).html(/?)+$ index.php?newsid=$1 [L]
Автоматизируй свои компании в Яндекс-Директ, Adwords, Вконтакте (http://context.apishops.com/102A7BFDEC6F64BBF0B2A41DEC1AC734.htm) Рекламная сеть Вконтакте (http://welcome.socialtank.ru/?lrRef=ThC6r)
S5
На сайте с 04.01.2010
Offline
77
#4

А теперь вопрос на засыпку, нахухой? По достижению нормальной посещалки следующий топик будет вида ДЛЕ ацки грузит сервер, помогите, либо ААААА, дле фуфло! Суть в урле следующая - берется айди, а все что после него - хоть абракадабру пишите. С точки зрения быстродействия - намного быстрей выбрать информацию из базы по индексированному айди, нежели по стринговому неиндексированному идентификатору. Да и по дублям здесь правильно сказали

Coolmac
На сайте с 08.09.2011
Offline
60
#5

User24, а вы уверены, что вот это вот ваше скопированное откуда-то работает? В RewriteRule теперь можно использовать пробелы? Вы действительно уверены что это все, что нужно изменить?

sg552, начиная с 9,4 (насколько помню), в Настройках системы есть опция Обрабатывать неверные URL ЧПУ. Посути это редирект с site.ru/1-blablabla.html на site.tu/1-news-title.html. А так да, убирать это не то чтобы сложно, просто непонятно к чему. Другое дело, когда слово заказчика - закон.

В данному случае посоветовал бы ТС избавится от подобного стремления:)

---------- Добавлено 16.06.2012 в 02:38 ----------

Нет, ну все же если вы желаете создать малостраничник, например. Зачем dle? Это как бы всеравно что купить тепловоз и прицепить к нему тележку. И ездить. Есть более простые CMS, где работать с урлами намного проще.

Доступные vps/ds с грамотной тех. поддержкой (https://my.friendhosting.net/pl.php?11304)
S5
На сайте с 04.01.2010
Offline
77
#6

"из гранатомёта по мухам"...

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