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

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Locked
Santyago
Forum Members
Forum Members
Posts: 48
Joined: Thu Mar 08, 2012 2:09 pm

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

Post 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]
Помогите пожалуйста!
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post 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
Last edited by guro on Wed Dec 05, 2012 1:54 am, edited 1 time in total.
Santyago
Forum Members
Forum Members
Posts: 48
Joined: Thu Mar 08, 2012 2:09 pm

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

Post by Santyago »

guro wrote:Создайте тег пользователя "check_alias" со следующим содержимым

Code: Select all

global $gCms;
[/quote]
[b]guro[/b] в сотый раз СПАСИБО ВАМ!!!
Вы тут главный консультант.
Все работает.
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

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

Post by sbupravi »

Что в первую очередь проверить, если описанные выше решения не подошли?

P.S.
сейчас открывается домен/родитель/страница.html - верно,
но если вставить любого родителя, например: домен/родитель-ххх/страница.html - откроется та же самая страница, хотя "родитель-ххх" - не существует!
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

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

Post by sbupravi »

P.P.S.
Сори, если это элементарно, но сколько ни лазил по форуму - метода не нашел.
Логичным было бы сделать - если неверный URL - выдавать ошибку 404!
Как это реализовать?
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post 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));
}
rAlex
Forum Members
Forum Members
Posts: 52
Joined: Tue May 26, 2009 9:59 am

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

Post by rAlex »

Подниму тему немного. Обращаюсь скорее даже на пряму к guro.
Что поменять в коде, чтобы выпадала ошибка 404, а не редирект?
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post 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();
rAlex
Forum Members
Forum Members
Posts: 52
Joined: Tue May 26, 2009 9:59 am

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

Post by rAlex »

Честно, я так и думал. Спасибо огромное.
Но, не работает с выводом архива новостей модуля CGBlog. То есть архив по месяцам показывать не хочет, остается на текущей странице.
Может, как выход, не ставить {check_alias} на шаблоне страницы новостей?..
Santyago
Forum Members
Forum Members
Posts: 48
Joined: Thu Mar 08, 2012 2:09 pm

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

Post by Santyago »

Гуро - на Вас весь саппорт cms. Спасибо.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post by guro »

;D Заодно и себя подтягиваем.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post by guro »

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

Return to “Russian - русский”