1

Тема: Правила rewrite для DLE Forum

Привет всем! Так уж случилось что у меня стоит "дерзкий" DLE Forum smile
Не так давно прошел все шаги оптимизации по статьям Александа, и заметил как начали исчезать ошибки в Google Webmasters. Но к сожалению изменения не коснулись моего "любимого" форума и мне захотелось его улучшить.
Заметил проблему в пункте "оптимизация HTML" GW c повторяющимися Title.
При создании топика, он доступен по нескольким адресам:
/forum/topic_4807/1
/forum/topic_4807/
/forum/topic_4807/last
/forum/topic_4807

само собой ни к чему хорошему это не приводит.
По рекомендации Александра поставил Disallow: /*/last$ в robots, а в правилах rewrite дописал:
RewriteRule ^forum/topic_([0-9]){1,10}/1$ forum/topic_$1/ [R=301,L]
RewriteRule ^forum/topic_([0-9]){1,10}$ forum/topic_$1/ [R=301,L]

Вроде бы все должно быть отлично... но вот при переходе на ссылку, к примеру, forum/topic_1234 должен происходить редирект со слешом, а получается, что обрезается ID топика до 1-го последнего символа:
forum/topic_4/

Прошу помощи. Как где допущена ошибка?

2

Re: Правила rewrite для DLE Forum

Ребята, реально нужна помощь с правами

Re: Правила rewrite для DLE Forum

Вот такое дело еще попробуй добавить в htaccess после RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_URI} ^/forum/
RewriteRule ^forum/topic_([^/]+)/last$ /forum/topic_$1/ [R=301,L]
RewriteRule ^forum/topic_([^/]+)/1$ /forum/topic_$1/ [R=301,L]
RewriteRule ^forum/topic_([^/]+)$ /forum/topic_$1/ [R=301,L]

Должен происходить редирект с:
/forum/topic_4807/last
/forum/topic_4807/1
/forum/topic_4807
На:
/forum/topic_4807/

4

Re: Правила rewrite для DLE Forum

admin пишет:

Должен происходить редирект с:
/forum/topic_4807/last
/forum/topic_4807/1
/forum/topic_4807
На:
/forum/topic_4807/

Спасибо, Александр!! Все получилось и теперь работает! Кроме /last  - он ведет на последнюю страницу топика, так что с ним редирект отпадает.. Закрыл его в роботс по твоей рекомендации - надеюсь поможет

5 (05.11.2012 23:52 отредактировано Balian)

Re: Правила rewrite для DLE Forum

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

if ($subaction == 'userinfo' OR
    $subaction == 'allnews' OR
    $subaction == 'newposts' OR
    $do == 'stats' OR
    $do == 'addnews' OR
    $do == 'register' OR
    $do == 'favorites' OR
    $do == 'rules' OR
    $do == 'pm' OR
    $do == 'feedback' OR
    $do == 'lastcomments' OR
    $do == 'lostpassword' OR
    $do == 'search' OR
    $do == 'lastnews' OR
    $do == 'alltags' OR
    $do == 'tags' OR
    $do == 'static' OR
    $act == 'forum' OR
    $act == 'add_topic' OR
    $act == 'getforum' OR
    $act == 'getnew' OR
    $act == 'search' OR
    $act == 'warn' OR
    $act == 'reputation' OR
    $act == 'subscription' OR
    $act == 'moderation' OR
//  $act == 'post' OR
//  $act == 'discuss' OR
    $act == '_topic' OR
//  $act == 'attachment' OR
    $act == 'posts' OR
//  $act == 'rss' OR
    $dle_module == 'date') $metatags .= <<<HTML
\n<meta name="robots" content="noindex,nofollow" />
HTML;

Вот как выглядит моя защита от поисковиков )  Так же добавил себе редактирование метатегов description и keywords в редактировании темы админом или модератором. Так как данные метатеги формируются автоматически при создании темы, зачастую бывают довольно корявыми. И в полезных темах было бы неплохо эти метатеги отредактировать. Если кому надо пишите, помогу.

6

Re: Правила rewrite для DLE Forum

Balian пишет:

не переходит на последнюю страницу последнего сообщения

Ну у меня с ластом всё в порядке - редиректит нормально. Только вот хотелось бы его закрыть от индексации, вот и всё. Или хотя бы уникализировать титл  сластом
Только вот пока не понимаю, зачем ты закрыл почти весь форум от индексации.. или может я чего в коде твоем не понял.
А вообще, если ты хорошо соображаешь в этом форуме - буду рад увидеть твои модификации если ты с ними готов делиться. У меня есть много пожеланий к улучшению и изменению некоторых функций.
Сейчас, к примеру, пытаюсь довести до ума СЕО на своем форуме... но не на всё хватает знаний

7

Re: Правила rewrite для DLE Forum

Я еще раз повторюсь, что редиректит нормально если допустим зашел в тему и написал в конце /last, тогда просто last удаляется и все замечательно, но если ты заходишь через "Последние сообщения" которые выводятся на главной странице форума в тему содержащую больше одной страницы ты не окажешься на последнем сообщении последней страницы, а будешь куковать на первой. Как это исправить я конечно же придумал.
Пишем в htaccess все, что было написано выше и далее заходим в файл engine/forum/sources/components/functions.php, ищем строку:

function forum_last

и меняем содержимое внутри на мой код:

function forum_last ($topic_id, $title, $last_user, $last_date, $password = false, $redirect = false, $fid = false, $access_read = false, $is_category = false, $last_pid = 0)
    {
        global $forum_config, $f_lang, $_TIME, $member_id, $db;
        
        if ($redirect)
        {
            return '';
        }
        
        //check_access
        
        $row_topic = $db->super_query("SELECT * FROM " . PREFIX . "_forum_topics WHERE tid = $topic_id");
        
        $last_page = @ceil(($row_topic['post'] + 1) / $forum_config['post_inpage']);     
        
        $title = stripslashes($title);
        
        $last_date = strtotime($last_date);
        
        $last_date_info = show_date($last_date);
        
        $h_title = $f_lang['topic_last_p'].' '.$title;                
        
        if ($forum_config['last_abc'])
        {
            if (strlen($title) > $forum_config['last_abc'])
            {
                $title = substr($title, 0, $forum_config['last_abc']).'...';
            }
        }
        
        if ($password AND md5($password) !== $_COOKIE["dle_forum_{$fid}"])
        {
            $link_topic = $f_lang['fl_c_forum'];
        }
        elseif (!check_access($access_read) && !$is_category)
        {
            $link_topic = $f_lang['fl_c_forum'];
        }
        elseif ($last_page > 1)
        {
            if ($forum_config['mod_rewrite']) { $p_sn = "/$last_page#post-{$last_pid}"; } else { $p_sn = "&amp;lastpost=1#post-{$last_pid}"; }
            
            $link_topic = link_topic($topic_id . $p_sn, $title, $h_title);            
                    
        }        
        else
        {
            if ($forum_config['mod_rewrite']) { $p_sn = "/#post-{$last_pid}"; } else { $p_sn = "&amp;lastpost=1#post-{$last_pid}"; }
            
            $link_topic = link_topic($topic_id . $p_sn, $title, $h_title);
        }
        
        $last_date_info .= $f_lang['fl_topic'].' '.$link_topic;
        
        $last_date_info .= $f_lang['fl_author'].' '.link_user($last_user);
        
        if (!$last_user or !$last_date){ $last_date_info = $f_lang['fl_nopost']; }
        
        return($last_date_info);
    }

Далее по поводу закрыть от индексации, это возможно по моему только если закрывать и тему от индексации тоже, по другому у меня не получилось. Зато придумал как уникализировать титл и дескриптион, возможно конечно не самое лучшее решение, но другого мне в голову так и не пришло. Вообщем долго у меня не получалось правильно сделать пока не догадался через реферальную ссылку попробывать, то есть в ласт можно попасть только через главную страницу форума, вот я этим и воспользовался.
Открываем  файл /engine/forum/sources/showtopic.php ищем этот код в самом низу:

else
        {
            $group_name = $user_group[$member_id['user_group']]['group_name'];
            
            forum_msg($f_lang['f_msg'], $f_lang['topic_read'], 'user_group', $group_name);
        }

Далее удаляем все что находится ниже, кроме "?>" и вставляем мой код:

$metatags['title'] = stripslashes($row_topic['title']);
        
        $url_str = $_SERVER["HTTP_REFERER"];
        if (preg_match("/forum\/$/", $url_str))
        { 
            $metatags['title'] .= ' &raquo; ' . "Последнее сообщение";
            $metatags['description'] .= " последнее сообщение";
        }
        
        $metatags['title'] .= ' &raquo; ' . $forum_config['forum_title'];

// ********************************************************************************
// FORUM BAR
// ********************************************************************************    
        if ($forum_config['forum_bar'])
        {
            $forum_bar_array = array_merge($forum_bar_array, $dle_forum->get_forum_bar($forum_id));
        }
    }

После этого изменения будет уникализироваться титл и описание.

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

8

Re: Правила rewrite для DLE Forum

Balian пишет:

Я еще раз повторюсь, что редиректит нормально если допустим зашел в тему и написал в конце /last, тогда просто last удаляется и все замечательно, но если ты заходишь через "Последние сообщения" которые выводятся на главной странице форума в тему содержащую больше одной страницы ты не окажешься на последнем сообщении последней страницы, а будешь куковать на первой.

ну раз такое дело, то повторюсь и я еще раз... лично у меня всё работает отлично с последними сообщениями и редиректит хоть на 150-ую страницу перепрыгивая на последнее сообщение.

Balian пишет:

PS: кому то бы не мешало научиться общаться повежливее и не быть агро-школьником.

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

9 (05.11.2012 16:24 отредактировано Balian)

Re: Правила rewrite для DLE Forum

darwin пишет:

ну раз такое дело, то повторюсь и я еще раз... лично у меня всё работает отлично с последними сообщениями и редиректит хоть на 150-ую страницу перепрыгивая на последнее сообщение.

Значит я у себя чего то наменял, но в любом случае уже работает.

Так же добавил в htaccess:
RewriteRule ^forum/topic_([^/]+)/last/$ /forum/topic_$1/ [R=301,L]
RewriteRule ^forum/topic_([^/]+)/([0-9]+)$ /forum/topic_$1/$2/ [R=301,L]

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

10

Re: Правила rewrite для DLE Forum

Balian пишет:

RewriteRule ^forum/topic_([^/]+)/last/$ /forum/topic_$1/ [R=301,L]
RewriteRule ^forum/topic_([^/]+)/([0-9]+)$ /forum/topic_$1/$2/ [R=301,L]

А вот за второе правило уважуха smile Как рас искал решение этому! Ну и первое поставил... лишним не будет

Добавлено: 05-11-2012 16:30:00

Balian, А репу, случаем, не знаешь как перекинуть в модуль Репутация 6.5 ?

11

Re: Правила rewrite для DLE Forum

С данным модулем не сталкивался и вообще я всем этим делом начал заниматься всего несколько месяцев назад, поэтому нет, не знаю.

12

Re: Правила rewrite для DLE Forum

Balian,
Случаем не знаешь как сделать редиректы с удаленных тем форума на главную страницу форума или сайта?

13

Re: Правила rewrite для DLE Forum

Знаю, но я себе сделал не через реврайты, а через код php. При переходе на несуществующую тему или удаленную он пишет, что типа вы не можете просматривать эту тему. Пишешь в конфиге форума в поле "URL к папке с форумом:" http://yoursite/forum/
Затем открываешь файл engine/forum/sources/showtopic.php и ищешь (у меня 523 строка):
$group_name = $user_group[$member_id['user_group']]['group_name'];
и ниже:
forum_msg($f_lang['f_msg'], $f_lang['topic_read'], 'user_group', $group_name);

Удаляешь эти строки и вставляешь вот это:
@header ( 'Location: ' . $forum_config['forum_url'] );

Теперь при переходе на несуществующую тему или удаленную будет кидать на главную страницу форума.

14

Re: Правила rewrite для DLE Forum

Balian пишет:

Теперь при переходе на несуществующую тему или удаленную будет кидать на главную страницу форума.

СпасибО! Вроде работает smile

Ты сообщение от меня про картинки не получал?

В общем хрень какая то.. у меня картинки залитыве на форуме и вставленные посты пользователей отображаются, но при нажатии на них не открываются в полный размер. Где копать и в чем проблема может быть?

15

Re: Правила rewrite для DLE Forum

Нет, не получал. Ну на форум их заливать помоему смысла нету, так как к ним ватер марк все равно не лепится. Лучше использовать кнопку image, но она у меня сначала не работала я ее чинил. Она у тебя работает?
Через эту кнопку замечательно вставляется и увеличивается в полный размер, с затемнением и всеми делами. У тебя максимальный размер для файла на форуме сколько стоит? У меня досих пор 2мб и поэтому кинуть большую картинку не получается, то есть проверить не могу. На сколько я знаю это меняется в php.ini но все никак не посмотрю где там че поменять )

16

Re: Правила rewrite для DLE Forum

Balian пишет:

Она у тебя работает?

не, не работала... на офф сайте нашел решение и всё заработало.

Balian пишет:

У тебя максимальный размер для файла на форуме сколько стоит?

Да тоже в раёне 2-х мб. Но все же хочеться починить вызов картинок...

Кстати, не знаешь где хороший шаблон достать для форума? Без наворотов, простенький

17

Re: Правила rewrite для DLE Forum

darwin пишет:

не, не работала... на офф сайте нашел решение и всё заработало.

На офф сайте решение с этой кнопкой я писал, но у меня там ник другой )

То есть ты хочешь чтобы пользователи заливали свои картинки к тебе на хост и эта картинка могла открываться в полный размер? Лично я у себя на форуме права заливать картинки на хост поставил только администрации, пользователи пусть кидают картинки через специальную кнопку.

darwin пишет:

Кстати, не знаешь где хороший шаблон достать для форума? Без наворотов, простенький

Ну я себе свой полностью перерисовывал, подстраивал под сайт, клево получилось вообщем. Шаблоны видел кто то на заказ делает, но точно не помню где. А так чтобы скачать бесплатно не встречал.

18

Re: Правила rewrite для DLE Forum

Balian пишет:

То есть ты хочешь чтобы пользователи заливали свои картинки к тебе на хост и эта картинка могла открываться в полный размер?

Ну да, как и на сайте в новостях например

19

Re: Правила rewrite для DLE Forum

Хм, проверил только, что у меня все работает. Нашел картинку побольше с маленьким весом и добавил залил ёё. Нормально все отображается и увеличивается...

20

Re: Правила rewrite для DLE Forum

Balian пишет:

Хм, проверил только, что у меня все работает. Нашел картинку побольше с маленьким весом и добавил залил ёё. Нормально все отображается и увеличивается...

Странно... может быть проблема в конфликте ... чего-то ? smile
AJAX, JS или CSS ?

Добавлено: 09-11-2012 23:33:13

Balian, тоже начал ковырять стиль форума )) захотелось сделать, что бы ячейки "последние сообщение" имя автора выводилось с учетом стиля групы. Я имею ввиду цвет ника.
Не знаешь как реализовать ?