Убрать PAGEN_ из адресной строки (сайт на битрикс)

Часто SEO просит убрать PAGEN_1 и все остальные из адреса пагинации битрикс. Попробуйте этот вариант в .htaccess:

#Beautiful paginations
php_value auto_prepend_file "/home/d/УЧЕТНАЯ_ЗАПИСЬ_ХОСТИНГА/ВАШ_САЙТ/public_html/bitrix/pagen.php"
RewriteRule ^(.*)/pagen([\d]+)/ /$1/?PAGEN_1=$2 [L,QSA]

Содержимое файла pagen.php:

<?php
function __isPathTraversalUri($uri)
{
    if (($pos = strpos($uri, '?')) !== false) {
        $uri = substr($uri, 0, $pos);
    }
    $uri = trim($uri);
    return preg_match("#(?:/|2f|^|\\\\|5c)(?:(?:%0*(25)*2e)|\\.){2,}(?:/|%0*(25)*2f|\\\\|%0*(25)*5c|$)#i", $uri) ? true : false;
}
$newUri = preg_replace('#(pagen[\d]+/)#is', '', $_SERVER['REQUEST_URI']);
if (!__isPathTraversalUri($newUri)) {
    $_SERVER['REQUEST_URI'] = $newUri;
}

Сайт для студии кузовного ремонта и детейлинга VipPro (carnano.ru)

Сайт для студии кузовного ремонта и детейлинга VipPro (carnano.ru) - WEBSTUDIUS

Обновили сайт для детейлинг-центра VipPro.

Выполнен полный редизайн сайта, с нуля. Новая айдентика.

Теперь все выгоды, плюсы и характер центра – яркий, мощный, но серьезный и внимательный к мелочам.

В планах – переезд на новый движок, настройка рекламы Директ.

Что говорят о себе?

“VipPro” — Старейший Детейлинг-Центр В Новосибирске (Carnano.Ru) При наличии этих составляющих в определенной последовательности можно достигнуть достойного результата! Имея квалифицированного специалиста, знающего технологию процессов мойки, полировки, химчистки состав и специализацию средств авто химии, Вы на пол пути к успеху. Другие важные составляющие – это качество, безопасность и эффективность применяемых средств авто химии. Современные автомобили состоят из различных материалов отделки экстерьера и интерьера; хром, пластик, лак, кожа, дерево, алюминий, текстиль и т.д. для поддержания которых в первозданном, презентабельном виде, продлении им срока службы требуется правильный уход и защита.

Ссылка на сайт: carnano.ru


Заказать сайт-визитку, лендинг, форум, портал или интернет-магазин вы можете, написав нам в Директ, WhatsApp, в ВК, на почту или позвонив нам по телефону +7-913-013-45-51.

Заказывайте у нас сайт любой сложности, на Tilda, WordPress, 1C-Bitrix, Joomla, OpenCart или на той системе, которая удобнее вам. Все сделаем в лучшем виде!

#WEBSTUDIUS

ЧИНИМДОМА.РФ – сайт для AG SERVICE на Tilda. Ремонт гаджетов с выездом

ЧИНИМДОМА.РФ - сайт для AG SERVICE на Tilda. Ремонт гаджетов с выездом
Сайт ЧИНИМДОМА.РФ сделан на конструкторе Тильда (Tilda)
ПОЧИНИ СВОЙ ГАДЖЕТ
НЕ ВЫХОДЯ ИЗ ДОМА
Качественно, быстро и недорого. Выездной ремонт техники — самый простой и удобный способ починить ваш сломанный девайс.
ЧИНИМДОМА.РФ - сайт для AG SERVICE на Tilda. Ремонт гаджетов с выездом
ЧИНИМДОМА.РФ – сайт для AG SERVICE на Tilda. Ремонт гаджетов с выездом

 

Ссылка на сайт: https://чинимдома.рф

 


Заказать сайт-визитку, лендинг, форум, портал или интернет-магазин вы можете, написав нам в Директ, WhatsApp, в ВК, на почту или позвонив нам по телефону +7-913-013-45-51.

Заказывайте у нас сайт любой сложности, на Tilda, WordPress, 1C-Bitrix, Joomla, OpenCart или на той системе, которая удобнее вам. Все сделаем в лучшем виде!

#WEBSTUDIUS

УЧУРЕМОНТУ.РФ – сайт для AG SERVICE на Tilda. Обучение ремонту гаджетов

УЧУРЕМОНТУ.РФ - сайт для AG SERVICE на Tilda. Обучение ремонту гаджетов

Сайт УЧУРЕМОНТУ.РФ сделан на конструкторе Тильда (Tilda)

 

УЧУРЕМОНТУ.РФ - сайт для AG SERVICE на Tilda. Обучение ремонту гаджетов
УЧУРЕМОНТУ.РФ – сайт для AG SERVICE на Tilda. Обучение ремонту гаджетов

 

Ссылка на сайт: https://учуремонту.рф

 


Заказать сайт-визитку, лендинг, форум, портал или интернет-магазин вы можете, написав нам в Директ, WhatsApp, в ВК, на почту или позвонив нам по телефону +7-913-013-45-51.

Заказывайте у нас сайт любой сложности, на Tilda, WordPress, 1C-Bitrix, Joomla, OpenCart или на той системе, которая удобнее вам. Все сделаем в лучшем виде!

#WEBSTUDIUS

СТЕКЛА.НЕТ – сайт для AG SERVICE на Tilda. Ремонт и замена стекол на гаджетах

СТЕКЛА.НЕТ - сайт для AG SERVICE на Tilda. Ремонт и замена стекол на гаджетах WEBSTUDIUS

Сайт сделан на конструкторе Тильда (Tilda)

СТЕКЛА.НЕТ - сайт для AG SERVICE на Tilda. Ремонт и замена стекол на гаджетах WEBSTUDIUS
СТЕКЛА.НЕТ – сайт для AG SERVICE на Tilda. Ремонт и замена стекол на гаджетах WEBSTUDIUS

 

Ссылка на сайт: https://стекланет.рф

 


Заказать сайт-визитку, лендинг, форум, портал или интернет-магазин вы можете, написав нам в Директ, WhatsApp, в ВК, на почту или позвонив нам по телефону +7-913-013-45-51.

Заказывайте у нас сайт любой сложности, на Tilda, WordPress, 1C-Bitrix, Joomla, OpenCart или на той системе, которая удобнее вам. Все сделаем в лучшем виде!

#WEBSTUDIUS

Перенаправление на другую страницу с таймером на JQuery

Выводим Div со счетчиком:

<div id="timeLeftBoxx">
<div id="timeLeftNum"></div>
</div>

и сам скрипт:
<script>
function CountAndRedirect(secounds) {

  $('#timeLeftNum').text(secounds);

  $('#timeLeftBox').show();

  var interval = setInterval(function() {

    secounds = secounds - 1;

    $('#timeLeftNum').text('Перенаправление на страницу оплаты произойдет через: '+secounds+' секунд');

    if (secounds == 0) {

      clearInterval(interval);
      if ($("input[name='registerOrder']")) {
      $("input[name='registerOrder']").trigger('click');
      $('#timeLeftBox').hide();
  	}

    }

  }, 1000);

}


$(document).ready(function() {
  
  CountAndRedirect(10);
});
	
</script>

Универсальный .htaccess для всех 301 редиректов сразу – http на https, www на без www и т.д.

Чисто памятка для универсального .htaccess для всех редиректов сразу – http на https, www на без www, со слешем, без слеша, с поддоменов одного домена на поддомены другого и т.д.

Используется на на сайтах на Битриксе, в целом, должен работать и на любых других.

Options -Indexes 
ErrorDocument 404 /404.php


RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

#ROBOTS.TXT
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

#DOMAIN AND SUBDOMAIN REDIRECTION
RewriteBase /

RewriteCond %{HTTP_HOST} !^(www\.)?old-site\.ru$
RewriteCond %{HTTP_HOST} ^(.+)\.old-site\.ru$
RewriteRule (.*) https://%1.new-site.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^old-site.ru$ [NC]
RewriteRule ^(.*)$ https://new-site.ru/$1 [R=301,L]


RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

#one-to-301-wo-www-and-slash

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://%1/$1/ [L,R=301]


#RewriteCond %{HTTPS} =off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]


  php_flag session.use_trans_sid off
  #php_flag default_charset UTF-8
  #php_value display_errors 1



  php_flag session.use_trans_sid off
  php_flag default_charset UTF-8

  #php_value display_errors 1



  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]



  DirectoryIndex index.php index.html



  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"

Убрать index.php (при .html – заменить .php в записи) в конце адреса

# remove index.php from the end of URI
RewriteEngine On
RewriteRule ^index\.php$ / [R=301,L]
RewriteRule ^(.*)/index\.php$ /$1/ [R=301,L]

Редирект GET параметров

Например, сделать редирект со страницы /?act=page&id=2 на /page-2/

RewriteCond %{QUERY_STRING} act=page [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule .* /page/%1/? [R=301,L]]

Как убрать все get запросы htaccess redirect

Бывает необходимо убрать все GET запросы/параметры из url, т.к на сайте они не используются, а поисковики пытаются индексировать страницы с этими параметрами и отмечают их как дубли.Для того, чтобы убрать GET параметры со всего сайта и сделать 301 редирект на ту же страницу но без параметров необходимо использовать следующую конструкцию:RewriteCond %{QUERY_STRING} ^(.+) [NC]
RewriteRule ^(.*)$ /$1? [R=301,L]

Настройка таких редиректов бывает необходимо после заражения сайта вирусами, когда идет очень много обращений к страницам файла с GET запросами.

Однако если административная панель сайта использует GET запросы, необходимо исключить из этой конструкции папку административной панели сайта, и переделать ее в следующий вид:

RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{QUERY_STRING} ^(.+) [NC]
RewriteRule ^(.*)$ /$1? [R=301,L]

Массовая генерация символьного кода в Битрикс

Решение проблем с сайтом на Битрикс

Честно сдернуто со страницы оригинала для удобства поиска )

Генерация символьных кодов для разделов и элементов инфоблоков
Задача:
С генерировать символьные коды для разделов или элементов инфоблока – если они не заданы

Используя скрипт предложенный Николаем Ефремовым делаем так:

1/ открываем командную строку PHP – Рабочий стол – Настройки – Инструменты – Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт

if(!CModule::IncludeModule("iblock"))
{
   echo "Error with iblock module!";
   die;
}
$arParams['IBLOCK_ID'] = 17;
$arParams['LIST_CNT'] = 50;
$arParams['IS_ADD_RAND'] = false;
$arParams['TYPE_WORK'] = 'section'; // {section | element}


$arOrder = array(
   "sort" => "inc",
);

$arFilter = array(
   "IBLOCK_ID" => $arParams['IBLOCK_ID'],
   "IBLOCK_LID" => SITE_ID,
   //"CODE" => "",
   "CODE" => false
);

$arTransParams = array(
   "max_len" => 100,
   "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change
   "replace_space" => '-',
   "replace_other" => '-',
   "delete_repeat_replace" => true
);

if($arParams['TYPE_WORK'] == 'section'){
   //for SECTIONS
   $db_elemens = CIBlockSection::GetList($arOrder, $arFilter, false);
   $db_elemens->NavStart($arParams['LIST_CNT']);
   echo '<pre>';
   while($ar_res = $db_elemens->GetNext())
   {
      $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
      if($arParams['IS_ADD_RAND']){
         $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
      }
      $arPropArray = Array( "CODE" => $transName );
      
      $el = new CIBlockSection;
      $res = $el->Update($ar_res["ID"], $arPropArray);
      echo "result for <b>".$ar_res["NAME"]."</b> is <b>".$transName.'</b>'.($res?" and OK":" and failed")."\r\n";
   }
   echo '</pre>';
}elseif($arParams['TYPE_WORK'] == 'element'){
   // for ELEMENTS
   $db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array("nTopCount" => $arParams['LIST_CNT']));

   $i = 0;
   echo '<pre>';
   while($obElement = $db_elemens->GetNextElement())
   {
      $ar_res = $obElement->GetFields();
      
      $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
      if($arParams['IS_ADD_RAND']){
         $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
      }
      $arPropArray = Array( "CODE" => $transName, );
      
      $el = new CIBlockElement;
      $res = $el->Update($ar_res["ID"], $arPropArray);
      echo "result for <b>".$ar_res["NAME"]."</b> is <b>".$transName.'</b>'.($res?" and OK":" and failed")."\r\n";
   }
   echo '</pre>';
}

2/ Определяемся с инфоблоком – ниже в скрипте в параметр $arParams[‘IBLOCK_ID’] нужно записать его ID

3/ Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams[‘IS_ADD_RAND’] – {true|false}

4/ Указываем шаг выборки – параметр $arParams[‘LIST_CNT’] – большим не стоит делать, максимум 100 элементов за раз

5/ Настраиваем параметры транслита. За это отвечает массив $arTransParams

$arTransParams = array(
   "max_len" => 100,
   "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change
   "replace_space" => '-',
   "replace_other" => '-',
   "delete_repeat_replace" => true
);

6/ Указываем для чего будем проводить генерацию – для разделов или для элементов – параметр $arParams[‘TYPE_WORK’] – возможные значения – {section | element}

7/ Жмем кнопку выполнить – прогнать скрипт нужное количество раз

Кнопки выбора цвета (варианта товара) вместо выпадающего меню в карточке товара на Тильде

Tilda - картинка с цветом либо с фото для выбора варианта товара вместо выпадающего списка

Сделано на Javascript и  CSS

Достаточно простой скрипт для реализации красивых кнопок выбора цвета вместо выпадающего меню в карточке товара на Тильде.

Javascript – настроить фильтр (кейс: умный фильтр Битрикс) для выбора (checkbox) только одного раздела фильтра.

Javascript - настроить фильтр (кейс: умный фильтр Битрикс) для выбора (checkbox) только одного фильтра.

Понадобилось сделать так, чтобы была возможность выбрать только какой-то один фильтр, при этом, второй фильтр одновременно с выбранным выбрать было нельзя. ))

Масло масляное, но в группах товаров на сайте есть взаимоисключающие друг друга фильтры.

Для реализации этого в Битрикс, в шаблоне вывода умного фильтра, добавил для input type=”checkbox” в цикле foreach поэлементного вывода дополнительный атрибут

data-filtername="<?=$arItem["NAME"]?>"

где <?=$arItem[“NAME”]?> – это не название пункта фильтра, а название раздела фильтра. Ну, например, раздел фильтра “Цвет” имеет имеет несколько элементов – цветов. Так вот, в каждом элементе раздела “Цвет” будет поле атрибута с названием “Цвет”, т.е., data-filtername=”Цвет”.

По сути, если элементы фильтра выводятся не в цикле, то атрибут вставляется в нужные input checkbox в HTML.

И там же в шаблоне добавил скрипт для реализации функционала:

<script>

// для первого раздела фильтра
let filterCheck = document.querySelectorAll("input[data-filtername='Одно']");  // выбираем все input с нужным атрибутом
// проходим циклом по всем элементам для проверки: если в другом разделе фильтра уже выбран какой-либо пункт, то, при клике на нашем checkbox, снимаем с него галку и выводим предупреждение

filterCheck.forEach(function(item) {
item.onclick = function() {
if (document.querySelector("input[data-filtername='Другое']:checked")) {
alert('Простите, но невозможно выбрать в фильтре Одно и Другое одновременно.')
item.checked = false; // снимаем галку с элемента
}
}
});

// аналогично первому
let filterCheck2 = document.querySelectorAll("input[data-filtername='Другое']");
filterCheck2.forEach(function(item) {
item.onclick = function() {
if (document.querySelector("input[data-filtername='Одно']:checked")) {
alert('Простите, но невозможно выбрать в фильтре Одно и Другое одновременно')
item.checked = false;
}
}
});

</script>

Реализация, понятное дело, не универсальная, но на скорую руку вполне рабочий вариант.

Открыть чат
1
Попробуйте написать нам в WhatsApp!
Попробуйте написать нам в WhatsApp!