Перейти к содержимому


Знак вопроса "?" в конце ссылки для UTM метки


  • Вы не можете ответить в тему
В теме одно сообщение

#1 gsm-group

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 101 сообщений
Репутация: 6
Начинающий

Отправлено 05 March 2013 - 12:05 PM

Добрый день! Проблема следующая:

не много кода))

.htaccess
#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################
 
Options +FollowSymlinks -Indexes -MultiViews
DirectoryIndex index.php
ErrorDocument 404 /404.html
php_value session.use_trans_sid    0
php_value session.use_cookies	  1
php_value session.use_only_cookies 1
php_value session.auto_start	   0
php_value magic_quotes_gpc		 0
php_value register_globals		 0
php_value display_errors		   0
php_value magic_quotes_runtime	 0
php_value allow_url_fopen		  1
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} /(\.+) [OR]
RewriteCond %{THE_REQUEST} /(\?+) [OR]
RewriteCond %{THE_REQUEST} /(/+)
RewriteRule ^(.*)$ 404.html [L]
RewriteRule ^core/(install|temp|smarty|modules|languages|includes|functions|fonts|files|config|classes|cache|backup)/(.*) - [F]
RewriteRule ^data/(.+)\.(tpl\.html|php|php3|php4|php5|phtml|pl|cgi) - [F]
RewriteRule ^install_check\.html$ install.php?check=yes [L]
RewriteRule ^index\.html$ index.php [L]
#RewriteRule ^news\.html$ index.php?news=yes [L]
RewriteRule ^price\.html$ index.php?show_price=yes [L]
RewriteRule ^cart\.html$ index.php?shopping_cart=yes [L]
RewriteRule ^wide_search\.html$ index.php?search_with_change_category_ability=yes [L]
RewriteRule ^feedback\.html$ index.php?feedback=yes [L]
RewriteRule ^compare\.html$ index.php?comparison_products=yes [L]
RewriteRule ^page_([0-9]+)\.html$ index.php?show_aux_page=$1 [L]
RewriteRule ^product_([0-9]+)\.html$ index.php?productID=$1 [L]
RewriteRule ^category_([0-9]+)\.html$ index.php?categoryID=$1 [L]
RewriteRule ^category_([0-9]+)_offset_([0-9]+)\.html$ index.php?categoryID=$1&offset=$2 [L]
RewriteRule ^category_([0-9]+)_show_all\.html$ index.php?categoryID=$1&show_all=yes [L]
RewriteRule ^show_news_([0-9]+)\.html$ index.php?fullnews=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)(?<!/)$ /$1/ [R=301,L]

RewriteRule ^news/$ index.php?news=yes [L]
RewriteRule ^news/([a-z0-9_-]+)\.html$ index.php?news_alias=$1 [L]
RewriteRule ^news/([0-9]+)/$ index.php?news=yes&offset=$1 [L]
RewriteRule ^news/all/$ index.php?news=yes&show_all=yes [L]
RewriteRule ^page/([a-z0-9_-]+).html$ index.php?aux_alias=$1 [L]
RewriteRule ^([a-z0-9_/-]+)/([0-9]+)/$ index.php?cat_alias=$1&offset=$2 [L]
RewriteRule ^([a-z0-9_/-]+)/all/$ index.php?cat_alias=$1&show_all=yes [L]
RewriteRule ^([a-z0-9_/-]+)$ index.php?cat_alias=$1 [L]
RewriteRule ^([a-z0-9_-]+)\.html$ index.php?prod_alias=$1 [L]


Участок формирование ЧПУ в модуле:
<?
function translit($str)
{
    $transtable = array();
    $transtable = array(
	    'А' => 'A',
	    'Б' => 'B',
	    'В' => 'V',
	    'Г' => 'G',
	    'Д' => 'D',
	    'Е' => 'E',
	    'Ё' => 'Yo',
	    'Ж' => 'Zh',
	    'З' => 'Z',
	    'И' => 'I',
	    'Й' => 'Y',
	    'К' => 'K',
	    'Л' => 'L',
	    'М' => 'M',
	    'Н' => 'N',
	    'О' => 'O',
	    'П' => 'P',
	    'Р' => 'R',
	    'С' => 'S',
	    'Т' => 'T',
	    'У' => 'U',
	    'Ф' => 'F',
	    'Х' => 'H',
	    'Ц' => 'Ts',
	    'Ч' => 'Ch',
	    'Ш' => 'Sh',
	    'Щ' => 'Shch',
	    'Ъ' => '',
	    'Ы' => 'I',
	    'Ь' => '',
	    'Э' => 'E',
	    'Ю' => 'Yu',
	    'Я' => 'Ya',
	    'а' => 'a',
	    'б' => 'b',
	    'в' => 'v',
	    'г' => 'g',
	    'д' => 'd',
	    'е' => 'e',
	    'ё' => 'yo',
	    'ж' => 'zh',
	    'з' => 'z',
	    'и' => 'i',
	    'й' => 'y',
	    'к' => 'k',
	    'л' => 'l',
	    'м' => 'm',
	    'н' => 'n',
	    'о' => 'o',
	    'п' => 'p',
	    'р' => 'r',
	    'с' => 's',
	    'т' => 't',
	    'у' => 'u',
	    'ф' => 'f',
	    'х' => 'h',
	    'ц' => 'ts',
	    'ч' => 'ch',
	    'ш' => 'sh',
	    'щ' => 'shch',
	    'ъ' => '',
	    'ы' => 'i',
	    'ь' => '',
	    'э' => 'e',
	    'ю' => 'yu',
	    'я' => 'ya',
	    ' ' => '-');
	   
    $str = strtr($str, $transtable);
    return $str;
}
function aliasClearAlias($alias, $name="")
{
$name = str_replace(" ","-", trim($name));
$name = strtolower(translit($name));
$name = preg_replace('#[^a-z0-9_-]+#i', '', $name);
$alias = str_replace(" ","-", trim($alias));
$alias = strtolower(translit($alias));
$alias = preg_replace('#[^a-z0-9_-]+#i', '', $alias);
if ($alias=="")
  $alias = $name;
return $alias;
}
//Дополнительные страницы
function auxCheckAlias($alias, $id, $type="add")
{
if ($type=="upd")
  $q = db_query("SELECT COUNT(*) FROM ".AUX_PAGES_TABLE." WHERE alias='".xEscSQL($alias)."' AND aux_page_ID<>".(int)$id);
else
  $q = db_query("SELECT COUNT(*) FROM ".AUX_PAGES_TABLE." WHERE alias='".xEscSQL($alias)."'");
$r = db_fetch_row($q);
$res = $r[0];
if ($res>0)
  return "";
return $alias;
}
function aliasGenerateAliasAux($id, $alias, $name, $type)
{
    $alias = aliasClearAlias($alias, $name);
    $alias = auxCheckAlias($alias, $id, $type);
    db_query("UPDATE ".AUX_PAGES_TABLE." SET alias='".xEscSQL($alias)."' WHERE aux_page_ID=".(int)$id);
}
function auxGetDataByAlias($alias)
{
  $alias = preg_replace('#[^a-z0-9_-]+#i', '', $alias);
  $q = db_query("SELECT aux_page_ID FROM ".AUX_PAGES_TABLE." WHERE alias='".xEscSQL($alias)."'");
  if ($r = db_fetch_row($q))
  {
		    $_GET['show_aux_page'] = (int)$r[0];
   return;
  }
  else
  {
   header("HTTP/1.0 404 Not Found");
   header("HTTP/1.1 404 Not Found");
   header("Status: 404 Not Found");
   die(ERROR_404_HTML);
   exit;
  }
}
//Новсоти
function newsCheckAlias($alias, $id, $type="add")
{
if ($type=="upd")
  $q = db_query("SELECT COUNT(*) FROM ".NEWS_TABLE." WHERE alias='".xEscSQL($alias)."' AND NID<>".(int)$id);
else
  $q = db_query("SELECT COUNT(*) FROM ".NEWS_TABLE." WHERE alias='".xEscSQL($alias)."'");
$r = db_fetch_row($q);
$res = $r[0];
if ($res>0)
  return "";
return $alias;
}
function aliasGenerateAliasNews($id, $alias, $name, $type)
{
    $alias = aliasClearAlias($alias, $name);
    $alias = newsCheckAlias($alias, $id, $type);
    db_query("UPDATE ".NEWS_TABLE." SET alias='".xEscSQL($alias)."' WHERE NID=".(int)$id);
}
function newsGetDataByAlias($alias)
{
  $alias = preg_replace('#[^a-z0-9_-]+#i', '', $alias);
  $q = db_query("SELECT NID FROM ".NEWS_TABLE." WHERE alias='".xEscSQL($alias)."'");
  if ($r = db_fetch_row($q))
  {
		    $_GET['fullnews'] = (int)$r[0];
   return;
  }
  else
  {
   header("HTTP/1.0 404 Not Found");
   header("HTTP/1.1 404 Not Found");
   header("Status: 404 Not Found");
   die(ERROR_404_HTML);
   exit;
  }
}
//Товары
function prodCheckAlias($alias, $id, $type="add")
{
	    if ($type=="upd")
	    {
			    $q = db_query("SELECT COUNT(*) FROM ".PRODUCTS_TABLE." WHERE alias='".xEscSQL($alias)."' AND productID<>".(int)$id);
			    $r = db_fetch_row($q);
			    $res = $r[0];
			    return $alias;
	    } else {
			    $q = db_query("SELECT COUNT(*) FROM ".PRODUCTS_TABLE." WHERE alias='".xEscSQL($alias)."'");
			    $r = db_fetch_row($q);
			    $res = $r[0];
			    if ($res>0)
					    return "";
			    return $alias;
	    }
}
function aliasGenerateAliasProd($id, $alias, $name, $type)
{
    $alias = aliasClearAlias($alias, $name);
    $alias = prodCheckAlias($alias, $id, $type);
    db_query("UPDATE ".PRODUCTS_TABLE." SET alias='".xEscSQL($alias)."' WHERE productID=".(int)$id);
}
function prodGetDataByAlias($alias)
{
  $alias = preg_replace('#[^a-z0-9_/-]+#i', '', $alias);
	    $get = explode('/', trim($alias, '/'));
	    $c = sizeof($get)-1;
  $alias = preg_replace('#[^a-z0-9_-]+#i', '', $get[$c]);
  $q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE alias='".xEscSQL($alias)."'");
  if ($r = db_fetch_row($q))
  {
		    $_GET['productID'] = $r['productID'];
   return;
  }
  else
  {
   header("HTTP/1.0 404 Not Found");
   header("HTTP/1.1 404 Not Found");
   header("Status: 404 Not Found");
   die(ERROR_404_HTML);
   exit;
  }
}
//Категории
function catCheckAlias($alias, $id, $type="add")
{
if ($type=="upd")
  $q = db_query("SELECT COUNT(*) FROM ".CATEGORIES_TABLE." WHERE alias='".xEscSQL($alias)."' AND categoryID<>".(int)$id);
else
  $q = db_query("SELECT COUNT(*) FROM ".CATEGORIES_TABLE." WHERE alias='".xEscSQL($alias)."'");
$r = db_fetch_row($q);
$res = $r[0];
if ($res>0)
  return "";
return $alias;
}
function aliasGenerateAliasCat($id, $alias, $name, $type)
{
    $alias = aliasClearAlias($alias, $name);
    $alias = catCheckAlias($alias, $id, $type);
    db_query("UPDATE ".CATEGORIES_TABLE." SET alias='".xEscSQL($alias)."' WHERE categoryID=".(int)$id);
}
function catGetDataByAlias($alias)
{
  if (($_GET['offset'] || $_GET['show_all']) && substr($_GET['cat_alias'], -1)!="/")
  {
   $_GET['cat_alias'] .= "/";
   $alias = $_GET['cat_alias'];
  }
  if (substr($alias, -1)!="/")
  {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: /".$alias."/");
   exit();
  }
  $alias = preg_replace('#[^a-z0-9_/-]+#i', '', $alias);
	    $get = explode('/', trim($alias, '/'));
	    $c = sizeof($get)-1;
  $alias = preg_replace('#[^a-z0-9_-]+#i', '', $get[$c]);
  $q = db_query("SELECT categoryID FROM ".CATEGORIES_TABLE." WHERE alias='".xEscSQL($alias)."'");
  if ($r = db_fetch_row($q))
  {
		    $_GET['categoryID'] = (int)$r['categoryID'];
   return;
  }
  else
  {
   header("HTTP/1.0 404 Not Found");
   header("HTTP/1.1 404 Not Found");
   header("Status: 404 Not Found");
   die(ERROR_404_HTML);
   exit;
  }
}
//Генерируем ссылки
function m_Aux($alias)
{
$url = "page/".$alias.".html";
return $url;
}
function m_AuxID($id)
{
$q = db_query("SELECT alias FROM ".AUX_PAGES_TABLE." WHERE aux_page_ID='".(int)$id."'");
$r = db_fetch_row($q);
$url = "page/".$r[0].".html";
return $url;
}
function m_News($alias)
{
$url = "news/".$alias.".html";
return $url;
}
function m_Cat($id, $url="")
{   
  global $fc;
  $r = array();
  if ($id>1)
  {
$r = $fc[$id];
    if ($r)
    {
	    if ($url=="") $url = "/".$r['alias'];
	    else $url = $r['alias']."/".trim($url, "/");
	    if ($r['parent']>1)
		    $url = m_Cat($r['parent'], $url);
    }
  }
  return trim($url, "/")."/";
}
function m_Prod($r)
{
    $url = "";
    if ($r)
    {
	    $url = $r['alias'].".html";
}
    return $url;
}
function aliasGetDataByAlias()
{
if ($_GET['news_alias']) {
  newsGetDataByAlias($_GET['news_alias']);
  return true;
} elseif ($_GET['aux_alias']) {
  auxGetDataByAlias($_GET['aux_alias']);
  return true;
} elseif ($_GET['cat_alias']) {
  catGetDataByAlias($_GET['cat_alias']);
  return true;
} elseif ($_GET['prod_alias']) {
  prodGetDataByAlias($_GET['prod_alias']);
  return true;
} else return false;
}
?>

Так вот в чем суть:
при ссылки на товар site.ru/XXXXXXXX.html? (знак вопроса на конце отрабатывается, т.е дубль страницы) - работает.
при ссылки на доп. страницу site.ru/page/XXXXXXX.html? (знак вопроса на конце отрабатывается, т.е дубль страницы) - работает.
А вот дальше косяки:
при ссылки на список новостей: site.ru/news/? не отрабатывает

при ссылки на категорию: site.ru/XXXXXXXXXX/? или site.ru/XXXXXXXXX/XXXXXXX/? и т.д - не отрабатывает

Помогите пожалуйста в решении проблемы.
  • 0

#2 gsm-group

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 101 сообщений
Репутация: 6
Начинающий

Отправлено 05 March 2013 - 07:39 PM

А за денежку?
  • 0