Page 1 of 1

Редирект с */ на .html

Posted: Mon Nov 26, 2012 12:41 pm
by Santyago
Не знал как правильно назвать тему
Суть такова - к странице можно обратиться как site.ru/stranica.html
также можно обратиться
site.ru/stranica/
Хотелось бы исправить на единое обращение *.html
а без html - сделать редирект на html
В config.php у меня стоит

Code: Select all

$config['page_extension'] = '.html';
Файл .htaccess

Code: Select all

Options -Indexes
<Files "config.php">
order allow,deny
deny from all
</Files>
ErrorDocument 403 /forbidden403.shtml
ServerSignature Off
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://сайт.ru/$1 [R=301,L]

# URL Filtering helps stop some hack attempts
#IF the URI contains a "http:"
RewriteCond %{QUERY_STRING} http\: [OR]
#OR if the URI contains a "["
RewriteCond %{QUERY_STRING} \[ [OR]
#OR if the URI contains a "]"
RewriteCond %{QUERY_STRING} \] [OR]
#OR if the URI contains a "<__script__>"
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#OR script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#OR any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^.*$ - [F,L]
# END Filtering

# CMSMS Rewriting
# Set assume mod_rewrite to true in config.php and clear CMSMS cache
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
Помогите пожалуйста!

Re: Редирект с */ на .html

Posted: Mon Nov 26, 2012 5:13 pm
by guro
Создайте тег пользователя "check_alias" со следующим содержимым

Code: Select all

global $gCms;
$page_alias = explode("/", preg_replace("|^\/(.*?)\/$|", "$1", $_SERVER['REQUEST_URI']));
$page_alias = $page_alias[count($page_alias)-1];
$manager =& $gCms->GetHierarchyManager();
$node =& $manager->sureGetNodeByAlias($page_alias);
if (!isset($node)) return;
$content =& $node->GetContent();
if ($content !== FALSE && is_object($content)) {
	$url = $content->GetUrl();
}
$url = str_replace($gCms->config['root_url'], "", $url) ;
if ($url != $_SERVER['REQUEST_URI'] && $url != $_SERVER['REQUEST_URI']) {
  header( "HTTP/1.1 301 Moved Permanently" );
  header("location: " . $gCms->config['root_url'] . ($url == "//"?"/":$url));
}
далее, во всех глобальных шаблонах в самом начале вставьте

Code: Select all

{check_alias}
PS
Как выяснилось, не работает с модулем Gallery

Re: Редирект с */ на .html

Posted: Tue Nov 27, 2012 5:15 am
by Santyago
guro wrote:Создайте тег пользователя "check_alias" со следующим содержимым

Code: Select all

global $gCms;
[/quote]
[b]guro[/b] в сотый раз СПАСИБО ВАМ!!!
Вы тут главный консультант.
Все работает.

Re: Редирект с */ на .html

Posted: Sun Apr 14, 2013 11:57 am
by sbupravi
Что в первую очередь проверить, если описанные выше решения не подошли?

P.S.
сейчас открывается домен/родитель/страница.html - верно,
но если вставить любого родителя, например: домен/родитель-ххх/страница.html - откроется та же самая страница, хотя "родитель-ххх" - не существует!

Re: Редирект с */ на .html

Posted: Mon Apr 15, 2013 4:47 pm
by sbupravi
P.P.S.
Сори, если это элементарно, но сколько ни лазил по форуму - метода не нашел.
Логичным было бы сделать - если неверный URL - выдавать ошибку 404!
Как это реализовать?

Re: Редирект с */ на .html

Posted: Tue Apr 16, 2013 11:38 am
by guro
В предыдущем варианте не учитывался параметр $config['page_extension']
Вот исправленный тег

Code: Select all

global $gCms;
$page_alias = explode("/", preg_replace("|^\/(.*?)\/$|", "$1", $_SERVER['REQUEST_URI']));
$page_alias = str_replace($gCms->config['page_extension'], "", $page_alias[count($page_alias)-1]);
$manager =& $gCms->GetHierarchyManager();
$node =& $manager->sureGetNodeByAlias($page_alias);
if (!isset($node)) return;
$content =& $node->GetContent();
if ($content !== FALSE && is_object($content)) {
	$url = $content->GetUrl();
}
$url = str_replace($gCms->config['root_url'], "", $url);
if ($url != $_SERVER['REQUEST_URI'] && $url != $_SERVER['REQUEST_URI'] . $gCms->config['page_extension']) {
  header( "HTTP/1.1 301 Moved Permanently" );
  header("location: " . $gCms->config['root_url'] . ($url == "//"?"/":$url));
}

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 7:40 pm
by rAlex
Подниму тему немного. Обращаюсь скорее даже на пряму к guro.
Что поменять в коде, чтобы выпадала ошибка 404, а не редирект?

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 7:48 pm
by guro
Вместо

Code: Select all

  header( "HTTP/1.1 301 Moved Permanently" );
  header("location: " . $gCms->config['root_url'] . ($url == "//"?"/":$url));
поставьте

Code: Select all

  header("HTTP/1.0 404 Not Found");
  header("Status: 404 Not Found");
или просто

Code: Select all

ErrorHandler404();

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 7:57 pm
by rAlex
Честно, я так и думал. Спасибо огромное.
Но, не работает с выводом архива новостей модуля CGBlog. То есть архив по месяцам показывать не хочет, остается на текущей странице.
Может, как выход, не ставить {check_alias} на шаблоне страницы новостей?..

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 7:58 pm
by Santyago
Гуро - на Вас весь саппорт cms. Спасибо.

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 8:04 pm
by guro
;D Заодно и себя подтягиваем.

Re: Редирект с */ на .html

Posted: Wed Jul 17, 2013 8:08 pm
by guro
rAlex wrote:Но, не работает с выводом архива новостей модуля CGBlog. То есть архив по месяцам показывать не хочет, остается на текущей странице.
Может, как выход, не ставить {check_alias} на шаблоне страницы новостей?..
Да, этот код 100% работает корректно только на контент страницах. Если в модуле используются собственные маршруты для ЧПУ, то возникают проблемы. Действительно, проще иногда не ставить {check_alias}.