• Как нужно изменить htaccess (opencart 3) для редиректа всех страниц на слэш в конце адреса?

    shambler81
    @shambler81 Куратор тега htaccess
    Обрати внимание что нужны оба правила и именно в такой последовательности посколкьу семантически каталог должен быть закрыт слешем, а файл естественно нет.
    Помни что файл читается сверху в низ и расположение редиректа имеет значаение.

    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    Options -Indexes
    #показывает список файлов в директории (или ошибку 403 - доступ запрещен), если нет дефолтного файла (index.html, index.php).
    
    ############################################################################
    #  убирает www
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
    
    ############################################################################
    # http -> https
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    ############################################################################
    # сам вкурсе
    RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
    RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
    
    ############################################################################
    # ЧПУ 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteCond %{REQUEST_URI} ^(.+)$
     # В URL есть хоть один символы
    RewriteRule ^(.*)$ $1/ [L,R=301]
    Ответ написан
  • Как исключить из копирования всей папки, одну папку на .bash?

    shambler81
    @shambler81 Куратор тега Linux
    Батенька сразу несколько замечаний.
    1. Базу дампим желательно через эвал, поскольку пароль может содержать как " так и ' так и { короче нужно извращаться
    eval "$(echo "mysqldump --no-tablespaces -u$DBLOGIN -p'$DBPASS' $DBNAME -h$DBHOST > $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql  && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME")"

    2.
    А зачем собственно вы храните это все на сервере, не проще сразу заливать в потоке на нужное место.
    Из плюсов все плюсы заливки 1 файла поскольку он в канале архивный.
    и плюсы все пофайловового копирования поскольку там уже лежит или распакованый если нужн или запакованый сайт.

    сейчас поищу где-то уменя были старые файлики похожие.

    SITEDIR="/home/bitrix/ext_www"                      # Папка до названия доменаов
    DBCONN="bitrix/php_interface/dbconn.php"            # Откуда читать настройки mysql
    FTPUSER="backup_ftp"                                # Логин FTP сервера
    FTPPASS="1111111"                        # Пароль FTP
    FTPHOST="11.154.209.177"                           # сервер FTP
    FTPDIR=""                                           # папка на FTP
    TMPDIR="/mnt/backup/site"                           # тут временный файл лежит до отправки
    TMPWPUTBASE="/mnt/backup"                            # wput подставит эту папку как базовую
    DATE=`date +"%Y-%m-%d"`                             # Формат даты в имени файла
    DATEYM=`date +%Y`/`date +%m`                        # Второй форматы даты
    LIST=${1:-`ls $SITEDIR | grep -E ".*\.\w{1,5}" | grep -v "restore.php" | grep -v "klondike.php"`} # Название сайта, тут выбор или аргумент или, регулярка  можно убрать только -L ;)
    
    mkdir -p $TMPDIR/$DATEYM # создаем  структ уру каталогов если их нет
    
    for ELEMENT in $LIST
        do
                    if [ ! -f /$SITEDIR/$ELEMENT/$DBCONN ];
                            then
                                echo " Файл $SITEDIR/$ELEMENT/$DBCONN не найден, сайт будет без БД!"
                            else
    
    DBLOGIN=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBLogin}\");")
    DBNAME=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBName}\");")
    DBPASS=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBPassword}\");")
    DBHOST=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBHost}\");")
    echo "Найдена BD $ELEMENT"
    echo ""
    echo "Login: $DBLOGIN"
    echo "DB   : $DBNAME"
    echo "Pass : $DBPASS"
    echo "Host : $DBHOST"
    echo ""
    echo "Дамп БД $DBNAME"
    
    # только через эвал и эхо смогли экранировать все  пароли
    eval "$(echo "mysqldump --no-tablespaces -u$DBLOGIN -p'$DBPASS' $DBNAME -h$DBHOST > $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql  && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME")"
    chown bitrix:bitrix $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql
                   fi
    
    echo "Считаем количество Файлов  на сайте"
    #SIZE=" $(find $SITEDIR/$ELEMENT/$WEB | wc -l)" && echo " В архиве будет $SIZE файлов"
    SIZE="$(find $SITEDIR/$ELEMENT/$WEB -not -path "$SITEDIR/$ELEMENT/bitrix/tmp/*" -not -path "$SITEDIR/$ELEMENT/bitrix/updates/*" -not -path "$SITEDIR/$ELEMENT/dev_logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/total_errors/*" -not -path "$SITEDIR/$ELEMENT/.git/*" -not -path "$SITEDIR/$ELEMENT/bitrix/catalog_export/logs/*" -not -path "$SITEDIR/$ELEMENT/bitrix/backup/*" -not -path "$SITEDIR/$ELEMENT/bitrix/cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/managed_cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/stack_cache/*" -not -path "$SITEDIR/$ELEMENT/upload/resize_cache/*" -not -path "$SITEDIR/$ELEMENT/stats/*" | wc -l)" && echo " В архиве будет $SIZE файлов"
    
    
    echo "Архивируем сайт $ELEMENT прогресс не в килобайтах а в  количестве файлов"
    
      tar -cvpzf $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz --directory $SITEDIR/$ELEMENT/$WEB --ignore-failed-read --exclude='./bitrix/tmp' --exclude='./bitrix/updates'  --exclude='./dev_logs' --exclude='./upload/1c_import_light/logs' --exclude='./upload/1c_import_light/total_errors' --exclude='./.git' --exclude='./bitrix/catalog_export/logs'  --exclude='./bitrix/backup'  --exclude='./bitrix/cache' --exclude='./bitrix/managed_cache' --exclude='./bitrix/stack_cache' --exclude='./upload/resize_cache' --exclude='./stats' . | pv -s $SIZE -l > /dev/null
    
    
    echo $ELEMENT
    
    
    # >> /dev/nool 2> /var/log/backup_error.log
            rm -f $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql # поскльку ложим на реальный сайт, ибо нормально добавить в архив не получитяс.
    
            echo "Сохраняем $ELEMENT на FTP"
    
            wput --basename=$TMPWPUTBASE -p    --no-directories      $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR && echo "Архив залит успешно, временные файлы удалены"
    >> /dev/nool 2> /var/log/backup_error.log
     #       rm -f $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz
    echo -en "\n\033[37;1;41m Ссылочка:\033[0m \e[1;4;36mwget ftp://$FTPUSER:$FTPPASS@$FTPHOST/site/$DATEYM/$ELEMENT-$DATE.tar.gz\e[0m\n\n" #ks05
    
      done
    
    
      if [ -n "$(cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep ^ssl_certificate )" ] ; then
           echo "        Найдены активные сертификаты SSL"
    
           cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep --perl-regexp "^ssl_certificate\s+.*\.pem" | grep  --perl-regexp -o  /.+[^\;]
           cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep --perl-regexp "^ssl_certificate_key.*\.pem" | grep  --perl-regexp -o  /.+[^\;]
    wput  -u --basename=/etc/ /etc/letsencrypt/live/bike-centre.ru/ ftp://backup_ftp:QWaszx123@178.154.209.177/etc_backup/
       # тут в телегу 
    curl --socks5-basic \-X POST https://api.telegram.org/bot5320773503:************/sendMessage -d chat_id=-676521809  -d \text="Backup site bike-centre.ru OK "

    Может что-то из этого покажется полезным
    скрипт запускается так scrypt.sh site.ru
    если просто то все сайты бэкапятся, соответственно кажыдй со своей базой со своим названием.
    Но тут не в потоке. о этом тут писал. https://klondike-studio.ru/blog/bystro-skopirovat-...
    Так же БД можно заливать сразу на удаленый сервер, притом уже архивную.

    Ну и как исключить я вам тут показал.
    Ответ написан
    Комментировать
  • В чем проблема в регулярном выражении?

    https://regex101.com/r/DHVFvl/1
    Собственно группы добавил
    Заменил на только цифры до запятой далее тоже на цифры
    Группы есть осталось тольок вывести то что вам нужно по факту просто сделав
    $1,$2
    Собственно язычек бы на котором вы это делаете. но там есть в ссылочке примрыэтого кода на разных языках смотрите.
    Ответ написан
    Комментировать
  • Как вывести в основном разделе под раздел с товарами 1С Bitrix?

    1. ставите нормальную выгрузку 1с а не то убожество что по дефолту в1с. https://1c.1c-bitrix.ru/ecommerce/download.php
    там есть виртуальное дерево каталога.
    То есть вы собираете структуру каталога из элементов и разделов в 1с, не похожую на то что 1с.
    Нкидываете как вам нужно при экспорте и загружаете уже нужную структуру на сайт.
    https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
  • Почему могла упасть производительность, при включении memcached в BitrixVM и сайта на Битрикс?

    Она и должна упасть, что вас смущяет.
    Он нужен в битиркс вм только для кластера, дабы можно было возить сессии.
    opcache более производителен, даже с файловым кешем.
    Даже через сокет
    Ответ написан
  • Как лучше реализовать эту таблицу в битрикс?

    Раздел "Стандарт, Профи, Корп
    подразделы у каждого "Работа с ТДС"
    Собственно все у тебя все есть, строишь табличку.

    638afd2e15ed7284328817.png
    Ответ написан
    Комментировать
  • Редирект, только для одного варианта страницы с параметром?

    shambler81
    @shambler81 Куратор тега htaccess
    1. я тут уже собрал все редиректор для битрикса https://klondike-studio.ru/standards/standartnyy-h...
    2. Не должно быть в индексе ни 1 странички с GET так что по хорошему в роботс ты закрываешь все странички с гет параметрами вообще. Не нужно мурыжить пейдженацию
    3. У тебя есть странички для сео, следовательнор ты их делаешь через привязку к секциям у секций настраивается чпу.
    Все что через смарт это ненужные странички типа "красный холодильник, бытовой, до30ват, бош" то есть мелочевка которая вообще не нужна в индексе ибо канибализирует запросы у более тяжелых страниц.

    Теперь по твоему тз
    RewriteCond %{QUERY_STRING} (^|&)PAGEN_2=1
    меняем на
    RewriteCond %{QUERY_STRING} (^|&)PAGEN_2=1$
    А чтоб вообще не париться
    https://donatstudios.com/RewriteRule_Generator
    Но опять же вы занимаетесь хераборой, смысла от этого нет.
    Вам нужно избавляться от всех гет а не части тех что у вас вылезла в 404
    Времена индекса милиона страниц на сайте ушли уже лет 7 назад
    Ответ написан
    Комментировать
  • Как в Linux вывести данные из файлов и записать построчно?

    shambler81
    @shambler81 Куратор тега Linux
    1. Братан я тебе ответ тоже дам скриншотом, ок ?
    2. Будь добр хотябы на скриншоте не 123 а те цифры что реально выбрал из того кода что ты показал, и так приходится разбираться в том что ты понаписал в добавок еще и магически думать чего тебе нужно.
    3. https://regex101.com/r/9gPiRY/11 будь другом закинь сюда все что у тебя есть

    Вначале мы разберемся с регуляркой, а потом будем уже разбираться с grep.
    Ответ написан
  • Как настроить скрипт для rsync?

    shambler81
    @shambler81 Куратор тега Linux
    Зачем вам для этого rxync?
    1. занимает местио бэкапом.
    2. Производительность, вначале создать потом отправить, когда можно это делать сразу
    3. исключай мусор в виде кеша, нафиг его таскать туда сюда.

    tar -cvpzf - --directory /home/bitrix/www --ignore-failed-read --exclude='./bitrix/tmp' --exclude='./bitrix/updates' --exclude='./bitrix/backup/*\.gz*' --exclude='./bitrix/backup/*\.tar*' --exclude='./bitrix/cache' --exclude='./bitrix/managed_cache' --exclude='./bitrix/stack_cache' --exclude='./upload' --exclude='./stats' --exclude='./bitrix/www/bitrix/.settings.php' --exclude='./bitrix/php_interface/dbconn.php' . |ssh root@192.168.0.246 "cd /home/bitrix/www;tar xvfz -"
    Ответ написан
    Комментировать
  • Как с помощью регулярок выделить тег, в котором содержатся такие же теги?

    Вам ответили в коментах, для парсинга дом регулярки просто не подходят.
    Если вырезать пару символов или урл это еще куда никуда, когда вопрос идет о куске дома то нет регулярки тут не подойдут.
    Ответ написан
    Комментировать
  • Как правильно настроить htacces?

    shambler81
    @shambler81 Куратор тега htaccess
    Как и всегда вы ошибаетесь в GET Он не является частью URL и вообще не может быть выделен через RewriteRule
    RewriteCond %{QUERY_STRING} (?:^|&)chpu\=(.+)(?:$|&)
    RewriteRule ^services/%1? [L,R=301]


    %1 - аналог $1 но из RewriteCond поскольку RewriteRule уже занял переменные с баксом, чтоб их вставить из конда нужно использовать %
    Ответ написан
    Комментировать
  • Как как распарсить .rc файл командой sed?

    как-то так ?

    echo -E "const std::map<unsigned int, std::string> nameMap = {"; cat /tmp/111.txt | egrep IDS | sed -e 's/\(IDS_STRING[0-9]\{1,\}\)[ ]\{1,\}\(.*\)/\{\1\, \2\},/gp'; echo "};"



    Вводный файл
    root@Bonus:/tmp# cat 111.txt
    STRINGTABLE
    BEGIN
        IDS_STRING101           "Example string 1"
        IDS_STRING102           "_Example string 3.14"
    END
    
    STRINGTABLE
    BEGIN
        IDS_STRING103           "Example string 3"
        IDS_STRING104           "_Example string 4"
    END


    Вывод
    root@Bonus:/tmp# echo -E "const std::map<unsigned int, std::string> nameMap = {"; cat /tmp/111.txt | egrep IDS | sed -e 's/\(IDS_STRING[0-9]\{1,\}\)[ ]\{1,\}\(.*\)/\{\1\, \2\},/gp'; echo
    const std::map<unsigned int, std::string> nameMap = {
        {IDS_STRING101, "Example string 1"},
        {IDS_STRING101, "Example string 1"},
        {IDS_STRING102, "_Example string 3.14"},
        {IDS_STRING102, "_Example string 3.14"},
        {IDS_STRING103, "Example string 3"},
        {IDS_STRING103, "Example string 3"},
        {IDS_STRING104, "_Example string 4"},
        {IDS_STRING104, "_Example string 4"},
    };
    root@Bonus:/tmp#


    Собственно по вашему тз.
    теперь что касается строк, вы не привели примера этих строк, но их можно выхватить несколькими способами, начиная с банальных cut и awk с соответствующими разделителями, ну и самим сед тоже можно.
    За разделитель можно взять первое "
    Из пояснений могу добавить что \1 это $1 в синтаксисе седа ;) ну и двойка соответственно $2
    Ответ написан
    Комментировать
  • Как перенаправить ответ Curl'a клиенту?

    Ниче не понял но вот вам про курл пхп и полные заголовки.
    https://gist.github.com/lemmycaution/3818359
    https://github.com/zounar/php-proxy
    Удобная вещь для подобных извращений.
    Ответ написан
    Комментировать
  • Как разрешить доступ к сайту через .htacces?

    shambler81
    @shambler81 Куратор тега htaccess
    DirectoryIndex index.php​ index.html
    видимо так
    Ответ написан
    Комментировать
  • Не меняется значение upload_max_filesize apache?

    Этих php.ini может быть как собак нерезанных. У меня на сервере их только стандартных 48 штук.
    не считая форков для отдельных сайтов.
    Каждый php.ini для представления пхп умноженные на версию самого пхп.
    Про что я это, про то что не факт что вы применили
    Обратите так же внимания что нужно менять не 1 а 3 значения должны быть не меньше нужного вам размера
    upload_max_filesize 100M
    post_max_size 100M
    memory_limit 100M

    Какой конкретно php.ini используется у вас на сайте " в консоле может быть другой", и у каждого сайта тоже.
    phpinfo на самом сайте и там будет видно какие php.ini файлы у него используются.
    Впишите в него и рестартуйте апачь
    если nginx то не забудьте рестартовать fpm демона.
    Ответ написан
    1 комментарий
  • Как настроить ЧПУ подразделов и торговых предложений от корня в Битрикс?

    вы документацию битрикс читали?
    https://сайт/каталог/товар
    Минимально возможный урл.
    Все остальное это дикие костыли.
    Очень вам рекомендую перед столь сомнительным действием взять с заказчика бумажку что это *** костыль который потом будет постоянно преподавать сюрпризы.
    Ответ написан
  • Не получается составить скрипт?

    1. убираем все лишнее в user.txt
    cat users.txt | egrep ^.[^#]+
    и сохраняем это в переменную это уже пример скрипта
    #!/bin/sh
    list=$(cat users.txt | egrep ^.[^#]+ )


    2. крутим цикл по нему
    #!/bin/sh
    list=$(cat users.txt | egrep ^.[^#]+ )
    
    for element in $list
    do 
        echo "$element" 
    
    done


    3. в цикле grep ищет в файле pass.txt соответствующую строку текущего юзера в цикле, и отображаем только его пароль grep $element pass.txt | cut -f 2 -d ':'
    В результате у нас получится что-то такое:
    #!/bin/sh
    list=$(cat users.txt | egrep ^.[^#]+ )
    
    for element in $list
    do 
        echo "$element"                                                       
        grep $element  pass.txt | cut -f 2 -d ':'                       
        pass=$(grep $element  pass.txt | cut -f 2 -d ':')       
    done


    Собственно у вас уже есть все переменные и текущий юзер $elemen и его пароль $pass.
    Все что вам остается теперь это впихнуть куда нужно, как это сделать я думаю вы уже разберетесь.
    Вам может понадобиться для отладки сервис онлайн генератор sed
    вы не привели пример созданного /etc/passwd соответственно че там и как у вас хз, нужно смотреть
    Опять же из тз, по умолчанию создавая юзера можно дать ему и домашнюю директорию и bash.
    НО если по тз именно через сед то да нужен файл /etc/passwd с созданым юзером user_1
    опять же есть тонкости к примеру с тем же паролем в котором могут быть спец символы тогда прийдется костылитьч через eval +echo
    Ответ написан
  • Какой самый быстрый дистрибутив Linux для программирования?

    shambler81
    @shambler81 Куратор тега Linux
    Брат у меня для тебя плохая новость.
    Программирование, а я так понимаю вы собираетесь это делать за деньги.
    Компьютер - это в вашем бизнесе актив, инструмент труда. И без вложений в него у вас будет банально неконкурентная эффективность.
    Короче смысл такой.
    Купи нормальный комп, а эту помойку выкинь на помойку.
    И это при всем уважение и любви к lunux
    У вас в корне не правильный подход к свой работе. Дистрибутив линукс тут вам не поможет.
    Мало того вам прийдется купить нормальные 2-3 монитора( это тоже повышает вашу эффективность) рекомендую сразу 32 дюйма.
    А вот герцовка вам не нужна вобще так тчо они не должны быть игровые.
    К примеру тот же phpstorm при подгрузке ядра проекта с легкостью хавает 16 гб.
    А диск нужно ssd естественно, поскольку это тоже повышает эффективность вашей работы, притом естественно рекоменую сразу Nvme диски, соответственно совместимую мать притом на PCI-16 контроллере для M2
    А это явно другой комп.
    Вы просто будете заниматься жданием вместо работы и ради чего ?
    Вы будете страдать ради того чтоб сэкономить 30 часов вашей работы, вы уверены что вы их сэкономите ожидая любых действий ?
    Ответ написан