Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
ralf

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

Рекомендованные сообщения

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

В \system\Http\Url.php

Найти

%[A-F0-9]{2}

Заменить на

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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. В темах очевидно работает, потому что использую ваш код, который выше.

Поделиться сообщением


Ссылка на сообщение

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
12/25/16 14:02 (изменено)
А почему он должен работать если это два разных форума?

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

Изменено пользователем ralf

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...