Вот появился более правильный вариант.
Создаем тег пользователя с именем check_alias и содержимым
Code: Select all
list($module, $needid) = explode(",", $_REQUEST['mact']);
$mparams = GetModuleParameters($needid);
$page_alias = cmsms()->variables['page'];
$manager = cmsms()->GetHierarchyManager();
$node =& $manager->sureGetNodeByAlias($page_alias);
if ( isset($node) && $module == '' ) {
$content =& $node->GetContent();
if ($content !== FALSE && is_object($content)) {
$real_url = $content->GetUrl();
$url = str_replace(cmsms()->config['root_url'], "", $real_url);
}
if ($url != $_SERVER['REQUEST_URI']) {
header( "HTTP/1.1 301 Moved Permanently" );
header("location: " . $real_url);
}
}
далее во всех глобальных шаблонах, в самом начале вставляем
Если в htaccess есть строчки
Code: Select all
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_METHOD} !POST$
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
их лучше удалить. А то, будут возникать двойные 301 редиректы.
PS
Проверялось на CMS 1.9.4.1