Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
ralf

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

Recommended Posts

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

 

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"), может из за этого?

 

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

Share this post


Link to post
Share on other sites

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

 

В \system\Http\Url.php

Найти

%[A-F0-9]{2}

Заменить на

%[A-Fa-f0-9]{2}

  • Upvote 1

Share this post


Link to post
Share on other sites

Но для полной поддержки параметров из /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() );

  • Upvote 1

Share this post


Link to post
Share on other sites

siv1987, обновил форум до 4.1.16.1 и очевидно затерся файл .htaccess и теперь со старых ссылок с _http://domen.ru/index.php/forum/42-primer/ не работает редирект на _http://domen.ru/forum/2-osnovnoy-forum/ .

 

Сейчас .htaccess такой:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteRule ^index\.php/(topic)/ redirect.php [L,QSA]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map)(\?|$) /404error.php [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

 

 

И не работает именно в разделах форума, в темах всё нормально. Что добавить .htaccess , чтобы заработало?

 

 

P.s. В темах очевидно работает, потому что использую ваш код, который выше.

Share this post


Link to post
Share on other sites

А почему он должен работать если это два разных форума?

Чтобы убрать index.php из адреса, после RewriteEngine добавить RewriteRule ^index\.php/(forum/.*) /$1 [R=301,L]

  • Upvote 1

Share this post


Link to post
Share on other sites
А почему он должен работать если это два разных форума?

На 4.1.14 всё работало. А после обновления перестало. В аднимке в логах, что на _http://domen.ru/index.php/forum/42-primer/ произошла ошибка.

Edited by ralf

Share this post


Link to post
Share on other sites
Чтобы убрать index.php из адреса, после RewriteEngine добавить RewriteRule ^index\.php/(forum/.*) /$1 [R=301,L]

Добавил, теперь работает. Спасибо!

Share this post


Link to post
Share on other sites

у меня аналогичная проблема. В старых версиях url страницы имели окончание /page6, а теперь имеют вид /?page=6

Попробовал как описано выше - не помогло.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...