Редирект старых чпу ссылок с /page__ - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

чпу

Страница 1 из 1

Редирект старых чпу ссылок с /page__

#1 Пользователь не на сайте   ralf ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 40
  • Регистрация: 22-Август 09
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 11 Сентябрь 2016 - 14:08

Вот такие записи теперь получаются:

Sun, 11 Sep 2016 10:57:45 +0000
IPS\Http\Url\Exception: INVALID_PATH (0)
#0 /home/admin/web/ДОМЕН.ru/public_html/system/Http/Url.php(209): IPS\Http\_Url::componentsFromUrlString('http://ДОМЕН...', false)
#1 /home/admin/web/ДОМЕН.ru/public_html/init.php(442) : eval()'d code(25): IPS\Http\_Url::createFromString('http://ДОМЕН...', true, false)
#2 /home/admin/web/ДОМЕН.ru/public_html/system/Request/Request.php(232): IPS\Http\cms_hook_Url::createFromString('http://ДОМЕН...')
#3 /home/admin/web/ДОМЕН.ru/public_html/system/Dispatcher/Front.php(72): IPS\_Request->url()
#4 /home/admin/web/ДОМЕН.ru/public_html/system/Dispatcher/Dispatcher.php(86): IPS\Dispatcher\_Front->init()
#5 /home/admin/web/ДОМЕН.ru/public_html/index.php(13): IPS\_Dispatcher::i()
#6 {main}
Request-URI: /index.php/topic/10274-%d0%b2-%d1%80%d0%be%d1%81%d1%81%d0%b8%d0%b8-%d1%85%d0%be%d1%82%d1%8f%d1%82-%d0%b7%d0%b0%d0%bf%d1%80%d0%b5%d1%82%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d0%bf%d0%b0%d1%82%d1%8c/page__st__2040
Array
(
    [0] => Array
        (
            [function] => exceptionHandler
            [class] => IPS\IPS
            [type] => ::
            [args] => Array
                (
                    [0] => IPS\Http\Url\Exception Object
                        (
                            [message:protected] => INVALID_PATH
                            [string:Exception:private] => 
                            [code:protected] => 0
                            [file:protected] => /home/admin/web/ДОМЕН.ru/public_html/system/Http/Url.php
                            [line:protected] => 932
                            [trace:Exception:private] => Array
                                (
                                    [0] => Array
                                        (
                                            [file] => /home/admin/web/ДОМЕН.ru/public_html/system/Http/Url.php
                                            [line] => 209
                                            [function] => componentsFromUrlString
                                            [class] => IPS\Http\_Url
                                            [type] => ::
                                            [args] => Array
                                                (
                                                    [0] => http://ДОМЕН.ru/index.php/topic/10274-%d0%b2-%d1%80%d0%be%d1%81%d1%81%d0%b8%d0%b8-%d1%85%d0%be%d1%82%d1%8f%d1%82-%d0%b7%d0%b0%d0%bf%d1%80%d0%b5%d1%82%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d0%bf%d0%b0%d1%82%d1%8c/page__st__2040
                                                    [1] => 
                                                )

                                        )
                                )
                            [previous:Exception:private] => 
                        )
                )
        )
)


Я так понимаю это переходы по старым ссылкам, которые были в 3-ей версии IP.Board. В старых версиях url страницы тем имели окончание page__st__2040, а теперь имеют вид ?page=6 . И ещё после перехода на IPS 4.0 я сменил кирилические Url на латинские (поставил плагин "Friendly URL Translit"), может из за этого?

Что сделать, чтобы исправить эту ошибку?
0

#2 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 745
  • Регистрация: 20-Март 09
  • Репутация: 2 280
  • IPB version:3.1.x
 

Отправлено 12 Сентябрь 2016 - 02:36

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

В \system\Http\Url.php
Найти
%[A-F0-9]{2}

Заменить на
%[A-Fa-f0-9]{2}

1

#3 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 745
  • Регистрация: 20-Март 09
  • Репутация: 2 280
  • IPB version:3.1.x
 

Отправлено 12 Сентябрь 2016 - 03:29

Но для полной поддержки параметров из /page__ нужно сделать отдельный редирект.

В .htaccess после RewriteEngine on (если его нету - добавить) добавить:

RewriteRule ^index\.php/(topic)/ redirect.php [L,QSA]

В корне форума создать файл redirect.php со следующем кодом

<?php

require_once 'init.php';
\IPS\Dispatcher\Build::i();

if( preg_match( '#/(?<type>topic)/(?<id>\d+)(-(?<title>[^/]+))?/(?:page__(?<page>.*?)(?:\?|$))?#', $_SERVER['REQUEST_URI'], $match ) )
{
	$request = array();
	
	if( $match['page'] )
	{
		$bits = explode( '__', $match['page'] );
		for( $i=0; $i<count($bits); $i += 2 )
		{
			$request[ $bits[ $i ] ] = urldecode( $bits[ $i+1 ] );
		}
	}

	if( $match['type'] == 'topic' )
	{
		try
		{
			$topic = \IPS\forums\Topic::load( (int) $match['id'] );
		}
		catch( \Exception $e )
		{
			\IPS\Output::i()->redirect( \IPS\Http\Url::baseUrl() );
		}
		
		$url  = $topic->url();
		$view = array( 'getnewpost' => 'getNewComment', 'getlastpost' => 'getLastComment' );

		if( $request['view'] AND isset( $view[ $request['view'] ] ) )
		{
			$url = $url->setQueryString( 'do', $view[ $request['view'] ] );
		}
		elseif( count( $k = array_intersect( array( 'p', 'pid', 'findpost', 'gopid' ), array_keys( $request ) ) ) )
		{
			$url = $url->setQueryString( array( 'do' => 'findComment', 'comment' => $request[ current( $k ) ] ) );
		}
		elseif( $request['st'] )
		{
			$page = floor( intval( $request['st'] ) / $topic::getCommentsPerPage() ) + 1;
			$url = $url->setQueryString( 'page', $page );
		}
		
		\IPS\Output::i()->redirect( $url );
	}
}

\IPS\Output::i()->redirect( \IPS\Http\Url::baseUrl() );

1

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна