Задать вопрос
  • Как сделать аналог nginx регулярного выражения через htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    <IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !/img.php?$
    RewriteRule ^(.*)$ /img.php? [L]
    </IfModule>

    как так, возможно еще нужно будет [L] заменить на [L,QSA]
    Ответ написан
    Комментировать
  • Один домен для нескольких прокси серверов?

    shambler81
    @shambler81 Куратор тега Linux
    Да можно указав 3 А записи в ДНС на разные сервера тогда они будут идти или по списку или по доступности не помню что точно, ну а балансировщик в nginx тебе уже давали ссылку
    https://nginx.org/ru/docs/http/ngx_http_upstream_m...
    Ответ написан
  • Как сделать правильный редирект/конфиг htaccess при apache/nginx reverse-proxy?

    если nginx не уверен всегда должен отработать апачь, те же 404 и тп отрабатывает как правило сама cms а не nginx по этому мы выделим это в отдельное правило error_page 401 403 404 405 500 502 503 = @fallback;
    а трайфайл вообще не используем

    server {
    ######################################################################
    ## Server configuration
    ######################################################################
            listen *:80;
            server_name bots.klondike.digital www.bots.klondike.digital   ;
            root /var/www/bots.klondike.digital/web;
    
    
    ######################################################################
    ## Enable gzip for proxied requests and static files
    ######################################################################
        # Enable gzip for proxied requests and static files
        gzip on;
        gzip_proxied any;
        gzip_vary on;
        gzip_http_version 1.1;
        gzip_types application/javascript application/json text/css text/xml;
        gzip_comp_level 4;
    
    ######################################################################
    ## Log configuration
    ######################################################################
    #Все логи отключены
            error_log /dev/null crit;
            access_log off;
    
    ######################################################################
    ## Errors send to apache2
    ######################################################################
    # у апача своих алиасов куча,  а так же некоторая статика отдается
    # средствамси php, по этому все ошибки обрабатывать только apache2
            error_page 401 403 404 405 500 502 503 = @fallback;
            location @fallback {
                    proxy_pass              http://127.0.0.1:82;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    
                    }
    
    ######################################################################
    ## Locations configuration
    ######################################################################
    #Отключаем логирование ошибок No such file or directory
    ## Disable .htaccess files
    
            location ~ /\.ht {
                    deny all;
    
                    access_log off;
                    log_not_found off;
            }
            ##
            location = /favicon.ico {
                    log_not_found off;
                    access_log off;
            }
            ##
            location = /robots.txt {
                    allow all;
                    log_not_found off;
                    access_log off;
            }
            ##
    ######################################################################
    # сервисы  на сайте phpmyadmin почта и letxencrypt
            location /phpmyadmin/ {
                    deny all;
                    # поставить пароль на phpmyadmin
                    return 555;
                    root  /usr/share/phpmyadmin/;
            }
            ##
            location /webmail/ {
                    rewrite ^/(.*)$ https://$http_host:8080/$1 permanent;
            }
            # letsencrypt
             location /.well-known/acme-challenge/ {
                    alias /usr/local/ispconfig/interface/acme/;
                    default_type text/plain;
    
             }
    # static content
    # Отдаем статику напрямую с nginx
            location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|mp3)$ {
                    root  /var/www/bots.klondike.digital/web;
                    access_log off;
                    expires max;
                    gzip_static on;
            }
    
    # default location
            location / {
                    index index.php index.html index.htm;
                    proxy_pass              http://127.0.0.1:82;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
           
    
    
    }
    Ответ написан
  • Как сделать директории папок с разными языками страниц(ru/en) корневыми, чтобы не отображать их в uri?

    shambler81
    @shambler81 Куратор тега htaccess
    это делается не средствами .htaccess а средствами вашего движка
    в .htaccess может лишь только инициализироваться ЧПУ
    Ответ написан
    Комментировать
  • Какое сочетание сервер/клиент стабильнее для удалённого доступа с Windows на Линукс?

    shambler81
    @shambler81 Куратор тега Linux
    windows server стоит дешевле чем весь этот геморой.
    так же у винды есть поддержка h264 которого при всем желание нет у линукса ;(((
    Я как сторонник линукса констатирую неутишительный факт работа по настройке будет дороже чем винда на 1 комп.
    а вот работа в обратном направление вполне себе возможна
    remmina с леокостью справляется с 99% задач rdp но опять же с отсутствием h264
    Ответ написан
  • Конфиг апача или .htaccess, запрет на вход на сайт по прямой ссылке?

    shambler81
    @shambler81 Куратор тега htaccess
    SetEnvIfNoCase User-Agent .*google.* search_robot
    SetEnvIfNoCase User-Agent .*yahoo.* search_robot
    SetEnvIfNoCase User-Agent .*bot.* search_robot
    SetEnvIfNoCase User-Agent .*ask.* search_robot
    
    Order Deny,Allow
    Deny from All
    Allow from env=search_robot

    ищется в гугле за несколько секунд
    Ответ написан
  • Как разместить несколько сайтов на выделенном сервере?

    все зависит от сайтов 10 к в сутки это здорово но так же есть и факторы которые не учтены.
    движок количество товаров и тд и тп, оптимизация кеша и размеры запросов в бд.
    Возможно 1 сайт прийдется держать на отдельном сервере а остальные можно собрать хоть 300 на другом.
    Физически их разместить можно легко на одном сервере
    практически нужно смотреть на сами сайты.
    Ответ написан
    Комментировать
  • Путь файла для поддомена, как настроить?

    shambler81
    @shambler81 Куратор тега htaccess
    1. какая панель управления ?
    2. зачем вам для поддоменов создавтать подкаталоги в самом сайте, в чем по вашему логика? почему бы просто не создать их как отдельный сайт без этих финтелей ?
    3. симлинк поможет вам решить проблему https://linux-notes.org/sozdanie-ssy-lok-symlink-v...
    Ответ написан
  • Как удалять файлы по маске в Centos?

    shambler81
    @shambler81 Куратор тега Linux
    вы не ответили в какой части есть отрывок, будем думать что в конце
    find . -type f  -mtime +7  -regex ".+190" -exec rm -r "{}" \;

    -type f - только файлы
    -mtime +7 старше 7 дней
    -regex ".+190" - любые символы в конце файла 190
    -exe - выполнить над ним
    rm -r "{}" - удалить файл который в {} вывод массива из файнд, короче подставляется имя файла которое соответствует всем вышесказанным условиям.
    Ответ написан
    1 комментарий
  • 301 редирект со страниц на html на без html cо /?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    я тут все подробно подписал, и привел к стандарту
    https://klondike-studio.ru/standards/standartnyy-h...
    Ответ написан
  • Как исправить отображения элементов сайта которые сломались из-за .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    1. а что у вас с цсс что отладчик говорит?
    2. нужны оба правила
    ############################################################################
    #### Убираем слеши в конце 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]
       # Добавляем слеш в конце.
    Ответ написан
    Комментировать
  • Почему не запускается nginx?

    expires 8d; - замени на expires max; - требования гугл пейдж спид.
    Теперь по пункткам
    1. journalctl -xe - вам уже написали
    2. nginx -t
    3. просо посмотри что в логе nginx
    Ответ написан
    Комментировать
  • Как задать редирект всех страниц с https на http index.php?

    Не забывай то сртификат на https все-равно должен существовать, посколкьу в противном случае редирект не сработает.
    ############################################################################
    #### Выбор основного зеркала (с www или без www)                        ####
    ############################################################################
        # 1. Удалить www
    #RewriteCond %{ENV:HTTPS} on
        #Если включен https
    #RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        # Проверяем, содержит ли домен www в начале URL.
    #RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
        # Перенаправляем удаляем www
    
        # 2. Добавить www
    RewriteCond %{ENV:HTTPS} on
        #Если включен https
    RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
        # Если нет www в начале домена
    RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
        #Подставляем www и https если он включен.
    
    ############################################################################
    #### Перенаправляем протокол http на https                              ####
    ############################################################################
    RewriteCond %{HTTPS} off
       # Проверяем наличие https в URL.
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
       # Перенаправляем протокол на http.
    Ответ написан
    Комментировать
  • Как определить корневую директорию на сервере?

    зайди в шаблон генерации конфигов apahce и nginx
    найди там document root и добавь ссылку
    перегенерируй шаблон
    Ответ написан
    Комментировать
  • Свой днс сервер обновляет записи быстрее?

    да быстрее
    Ответ написан
    Комментировать
  • Сделать редирект убрать "?start=0" в конце?

    shambler81
    @shambler81 Куратор тега htaccess
    1 и то и друго не является "нормальным" адресом поскольку у них есть гет запрос в любом случае, в следствие этого у вас имеется куча страниц с одинаковыми тайтлами и дескрипшенами, только с разным контентом внутри.
    В следствие этого у вас страниц "тостеры красные бош" будет 30 страниц, по сути каждая страничка пейдженации
    смотри канибализация запросов
    По этому я бы рекомендовал
    1. риал каноникал на страничу без гет параметров
    2. запретить гет запросы в робот txt
    3. Собрать нормальное ЧПУ
    4. пейдженацию убрать за аякс ( опционально)
    5. убрать устаревшую пейдженацию и поставить https://developers.google.com/search/docs/guides/l... он реально крут.

    теперь ответ на твой ответ ;)

    RewriteCond %{QUERY_STRING} (^|&)start\=0($|&)
    RewriteRule ^forum/topic1$ /forum/topic1? [L,R=301]
    Ответ написан
    Комментировать
  • Как написать правило .htaccess на запрос пароля?

    shambler81
    @shambler81 Куратор тега htaccess
    AuthUserFile /var/www/mysite/.htpasswd
    AuthName "Please Log In"
    AuthType Basic
    require valid-user
    Order allow,deny
    Allow from 192.168.1.1
    satisfy any
    Ответ написан
  • Как скрыть пароль mysql в bash-скрипте?

    Так будет лучше чем держать чем все базы в одном файле
    Пример дампа всех баз в отдельные файлы

    #!/bin/sh
    #скрипт бэкапа баз данных
    ###########################
    #Создаем папку для архивов.  -p не ругается когда папка уже есь test проверяет есть ли папка  для чистых логов
    test ! -d /var/backup/mysql/`date +%Y` && { mkdir -p /var/backup/mysql/`date +%Y` ; }
    test ! -d /var/backup/mysql/last && { mkdir -p /var/backup/mysql/last ; }
    
    #прячем от умных, и так не зайдут но всеже.
    chmod 600 /var/backup/mysql
    chmod 600 /var/backup/mysql/last
    
    # делаем сам дапм файлов sql, свежинькие файлы лежат всегда в ней, очень удобно не нужно заходить в архивы и искать там вчерашние базы, и логируется.
    for i in `mysql -uroot -p11111111 -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -uroot -pp11111111 $i > /var/backup/mysql/last/$i.sql;done >> /dev/null 2>> /var/log/sqlbackup.log
    # Архивируем дамп, ну и логируем разумеется
    cd /var/backup/mysql/
    tar -czvf /var/backup/mysql/`date +%Y`/sqldump-`date +%Y-%m-%u`.tar.gz ./last >> /dev/null > /var/log/sqlbackup.log
    #(echo "Subject: Бэкап mysql  klondike-server завершен"; cat /var/log/sqlbackup.log;) | /usr/sbin/sendmail  viktor@7877796.ru
    ##################  Конец скрипта
    
    #  БЭКАП /etca
    test ! -d /var/backup/etc/ && { mkdir -p /var/backup/etc/ ; }
    DATE=`date +%F`;
    BACKUPPATH="/var/backup/etc";
    find $BACKUPPATH/ -mtime +60 | xargs rm -f; #удаляет предыдущие бэкапы старше 60 дней.
    tar -czvf "$BACKUPPATH/etc.$DATE.tar.gz" /etc/ > /dev/null 2> /dev/null;


    ну или вариант .
    #!/bin/sh
    # Пример пути до сайта /var/www/site.ru/web/
    SITEDIR="/var/www"                                  # Папка до названия доменаов
    WEB="web"                                           # Папка после названия доменов (если есть)
    DBCONN="bitrix/php_interface/dbconn.php"            # Откуда читать настройки mysql
    FTPUSER="111111111"                                   # Логин FTP сервера
    FTPPASS="111111111111111"                        # Пароль FTP
    FTPHOST="u113948.your-storagebox.de"                # сервер FTP
    FTPDIR="/11111.ru/site/"                             # папка на FTP
    TMPDIR="/var/backup/site"                           # Где будут храниться временные файлы
    DATE=`date +"%Y-%m-%d"`                             # Формат даты в имени файла
    DATEYM=`date +%Y`/`date +%m`                        # Второй форматы даты
    LIST=${1:-`ls -L $SITEDIR | grep -E ".*\.\w{1,5}" | grep -v "restore.php" | grep -v "klondike.php"`} # Название сайта, тут выбор или аргумент или, регулярка  можно убрать только -L ;)
    
    test ! -d $TMPDIR/$DATEYM && mkdir -p $TMPDIR/$DATEYM # создаем  структ уру каталогов если их нет
    
    for ELEMENT in $LIST
        do
                    if [ ! -f /$SITEDIR/$ELEMENT/$WEB/$DBCONN ];
                            then
                                echo " Файл $SITEDIR/$ELEMENT/$WEB/$DBCONN не найден, сайт будет без БД!"
                            else
                                    DBLOGIN=$(grep "^\$DBLogin =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    DBPASS=$(grep "^\$DBPassword =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    DBNAME=$(grep "^\$DBName =" $SITEDIR/$ELEMENT/$WEB/$DBCONN | cut -f2 -d'"')
                                    mysqldump -u$DBLOGIN -p$DBPASS $DBNAME > $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME
                                    sed -i "/\/*40101 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\/*40103 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40111 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40014 SET/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    sed -i "/\!40000 ALTER/d" $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql
                                    #echo "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';" > $SITEDIR/$ELEMENT/$WEB/bitrix/backup/$DBNAME\-$DATE\_after_connect.sql
    
                    fi
    
        echo "Архивируем сайт $ELEMENT"
            tar -cvpzf $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz --directory $SITEDIR/$ELEMENT/$WEB --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/resize_cache' --exclude='./stats' . >> /dev/nool 2> /var/log/backup_error.log
            rm -f $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql # поскльку ложим на реальный сайт, ибо нормально добавить в архив не получитяс.
            #rm -f $SITEDIR/$ELEMENT/$WEB/bitrix/backup/$DBNAME\-$DATE\_after_connect.sql
    
            echo "Сохраняем $ELEMENT на FTP"
            wput  --basename=$TMPDIR --limit-rate=60000K --timestamping  --tries=2 $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR
            rm -f $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz
    
    echo -en "\n\033[37;1;41m Ссылочка:\033[0m \e[1;4;36mwget ftp://u113948-sub1:11111111111@$FTPHOST/$DATEYM/$ELEMENT-$DATE.tar.gz\e[0m\n\n" #ks05
      done
    rm -r $TMPDIR

    Данный вариант уже поддерживает аргумент в виде сайта котормоу нужно сделать дампbxbump site.ru, так же он демпит сам сайт со спецификой движка ( тут битрикс) берет данные прям с конфига, заливает на внешний фтп
    Если аргумента нет то будет дамп всех сайтов и всех бд к ним
    ну и дает ссылку в режиме RO уже для чтения с этого сервера.
    p.s требует доустановку wput поскольку можно ограничить скорость аплоада
    Ответ написан
    1 комментарий
  • Как убрать папки из url?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
    # если строка начинается с /dir1/ 
    RewriteRule ^(.*)$ /dir1%1 [R=301,L] 
    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL

    Подробней писал тут
    https://klondike-studio.ru/blog/snipet-for-htaccess/

    Если же вам нужно ограничить количество и директорий
    ^/dir1/(.*)[^/]\.(.*)[^/]\.(.*)[^/]$

    (.*)[^/] -любое но не слеш
    Ответ написан