CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
Fucktor

Убираем ID новости из URL адреса

Recommended Posts

Как убрать ID публикации из URL новости:

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]
вырезаем и вставляем в самый конец файла следующий код:
# Сам пост

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]
4. Что бы со старых типов ссылок шло перенаправление на ссылки нового вида необходимо открыть файл /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;


}
Провёл выше указанные операции, ссылки стали без ID, но возникла проблема в DLE 9.2 полная новость не отображается :( Помогите пожалуйста решить сию проблему. Вот сайт где возникла проблема http://www.rapcorp.net/ при переходе на полную новость страница без новости :(
// ################ Новость целиком #################  

            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";

            }

        }

Вот что-то тут походу изменить нужно.

Edited by Fucktor
  • Upvote 4

Share this post


Link to post
Share on other sites

Отличный хак.

Совместно с форумом на DLE косяков не будет?

Какие недостатки в себе несёт использование, помимо того, что наверное ссылки все в поисковиках заново будут переиндексироваться?

ЗЫ я не понимаю, зачем этот айди в адресной строке вообще нужен в стандартной сборке??

  • Upvote 1

Share this post


Link to post
Share on other sites

ЗЫ я не понимаю, зачем этот айди в адресной строке вообще нужен в стандартной сборке??

чтобы случайно не получилось дублей + гугл ньюс требует, чтобы был ID.

  • Upvote 1

Share this post


Link to post
Share on other sites

Как убрать ID публикации из URL новости

Нафига? :) Я вот видел народ наоборот убирает из ЧПУ название новостей, а оставляет чисто id, выглядит типа http://sait.ru/news/123.html

  • Upvote 1

Share this post


Link to post
Share on other sites

Дубли не появятся, если самому вбивать название ЧПУ.

А что за гугль-ньюс?

Я вот видел народ наоборот убирает из ЧПУ название новостей, а оставляет чисто id, выглядит типа http://sait.ru/news/123.html

и доменное имя сменить на айпи

живем ведь в век цыфровых технологий!!

  • Upvote 1

Share this post


Link to post
Share on other sites

Какие недостатки в себе несёт использование

поиск по текстовым полям создает в разы большую нагрузку, чем по числовому полю

  • Upvote 1

Share this post


Link to post
Share on other sites

и доменное имя сменить на айпи

живем ведь в век цыфровых технологий!!

Не вижу связи... Зато вот ссылочки то короче полчаются ;)

  • Upvote 1

Share this post


Link to post
Share on other sites

+ Нужно добавить проверку alt_name при добавлении новости.

Если alt_name существует то скрипт добавляет _2 / _3 / _4 ( test_title_2 ) в конец alt_name.

  • Upvote 1

Share this post


Link to post
Share on other sites

500 Internal Server Error.

Почему так выходит? Сделал все правильно, проверил несколько раз

Share this post


Link to post
Share on other sites

500 Internal Server Error.

Почему так выходит? Сделал все правильно, проверил несколько раз

У меня тоже такое выходит на 9.2., после последнего изменения в .htaccess

Share this post


Link to post
Share on other sites

Да, вот и у меня тоже на 9.2 проблема возникла, не показывало полную новость. Хотя на главной вид ссылок действительно изменился и стал без ID, но вот не рабочие они.

К тому же, рабочих примеров я еще ниразу не встречал. ShapeShifter и Fucktor, что у вас получилось то? Какая версия ДЛЕ? Покажите как работает. А то такое ощущение, что гон это.

Share this post


Link to post
Share on other sites

В прочем... после пары переделок, заработало, только не работают статические страницы.

Что я изменил?

1. В шаге №3:

# Сам пост

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]

2. В шаге №4 не стал добавлять этого:

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;

}

Share this post


Link to post
Share on other sites

На 9.4 не работает все страницы идут на главную пример partner.xwara.ru. Почему так может кто подскажет?

Edited by YXX

Share this post


Link to post
Share on other sites

В настройках движка не включали функцию перенаправления?

Share this post


Link to post
Share on other sites

500 Internal Server Error.

Почему так выходит? Сделал все правильно, проверил несколько раз

500 Internal Server Error.

Почему так выходит? Сделал все правильно, проверил несколько раз

У меня тоже такое выходит на 9.2., после последнего изменения в .htaccess

Вероятно у вас ограничение на количество правил в данном файле. Уточните у хотера.

Share this post


Link to post
Share on other sites

Подскажите а кто нибудь, встречал хак полностью противоположный этому .. чтобы убрать заголовок поста и оставить только ID ?

Заранее спасибо.

Edited by mr.8pa4

Share this post


Link to post
Share on other sites

mr.8pa4,

для этого не нужен хак. это есть в настройках системы - ТИП ЧПУ

  • Upvote 3

Share this post


Link to post
Share on other sites

/index.php?newsid=1683

это не то ... я о том чтобы было так (к примеру)

/1743.html или /1743 или /1743/

чтобы не вставляло ЧПУ URL статьи:

а статья определялась и имела переход по одному ID , так как в таких URL мало смысла

пример таких урлов

http://www.kinopoisk.../1/film/491724/

всяко лучше смотрится чем

/1750-sekretnaya-sluzhba-santy-shaluny-protiv-poslushnyh-prep-and-landing-naughty-vs-nice.html

Edited by mr.8pa4

Share this post


Link to post
Share on other sites

ну убери в генерации ссылки ALT_NAME и будет тебе счастье, htaccess править не нужно

Share this post


Link to post
Share on other sites

Поделитесь рабочим хаком для DLE 9.5

Да, не плохо было бы, под DLE 9.5, а то не работает.

Та же проблема, при клике на статью, на главной странице, не выводиться статья, а пустая страница.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this