Задать вопрос
  • Редирект при множественном "///"?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{THE_REQUEST} //
    RewriteRule .* /$0 [R=301,L]

    - единственный нормально работающий способ.
    А вот тебе в добавок дополнительные, тут доп исключения.

    ############################################################################
    #### Cтандартный .htaccess для проектов студии Клондайк, версия 2.4     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Выбор основного зеркала (или с www или без www)                    ####
    ############################################################################
       # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
       # Проверяем, содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       # Перенаправляем URL на домен без www.
    ####
       # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
       # Проверяем, не содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
       # Перенаправляем URL на домен c www.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule .* /$0 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце 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 нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
      AddOutputFilterByType DEFLATE application/x-font
      AddOutputFilterByType DEFLATE application/x-font-opentype
      AddOutputFilterByType DEFLATE application/x-font-otf
      AddOutputFilterByType DEFLATE application/x-font-truetype
      AddOutputFilterByType DEFLATE application/x-font-ttf
      AddOutputFilterByType DEFLATE application/x-javascript
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE font/opentype
      AddOutputFilterByType DEFLATE font/otf
      AddOutputFilterByType DEFLATE font/ttf
      AddOutputFilterByType DEFLATE image/svg+xml
      AddOutputFilterByType DEFLATE image/x-icon
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/xml
      AddOutputFilterByType DEFLATE image/svg+xml
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType image/jpeg "access plus 3 day"
      ExpiresByType image/svg "access plus 3 day"
      ExpiresByType image/gif "access plus 3 day"
      ExpiresByType image/png "access plus 3 day"
      ExpiresByType text/javascript "access plus 3 day"
      ExpiresByType text/css "access plus 3 day"
      ExpiresByType application/javascript "access plus 3 day"
    </IfModule>
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
    1 комментарий
  • JS: ловлю форму с помощью mutationObserve, слушаю событие отправки формы, но событие не наступает, почему?

    szQocks
    @szQocks
    Я не знаю как ты изучаешь технологию, я хоть и не пишу на валидном, но я за 10 минут прочитал об
    MutationObserver

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

    Если же сама дом нода изменилась - например если ты повесишь дата атрибут на форму - твой коллбэк в MutationObserver - будет вызван, так как дом нода изменилась, так же можно и за нодами потомков следить и т.д.

    Вот я написал пример - Пример
    Пусть сколько угодно будет раз вызвано событие submit - так как форма не изменилась - то и вызван коллбэк в MutationObserver не будет. Но если при submit - на форму повесить атрибут id рандомный - то коллбэк будет вызван. Вообще бы не советовал пользоваться этой штукой, от неё мне кажется проблем больше, где-то не углядишь и она будет вызывать в те моменты когда ты их и не ожидаешь.
    Ответ написан
    1 комментарий
  • Регулярные выражения: как найти слово с начинающееся с цифры?

    Stalker_RED
    @Stalker_RED
    Во-первых, оно работает https://regex101.com/r/7oy7zo/1
    Во вторых, возможно заканчивать пробелом - не самая хорошая идея, т.к. вы захватываете лишние пробелы и знаки припинания. Можно конечно потом применить trim(), но почему-бы сразу в регулярке прописать ограничения?
    (\d.*?)[,\s] вот так уже не захватываем пробел и запятую.
    Ответ написан
    2 комментария
  • Регулярные выражения: как найти слово с начинающееся с цифры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Тут разные подходы могут быть.

    Можно перечислить все символы в артикле:
    \b(\d[\d\w.-]*)
    (числа, латинские буквы, дефис, точка)
    Если нужны русские, их нужно отдельно вписать по типу А-Яа-я.

    Также можно использовать выражение "всё кроме". Например, "кроме пробела":
    \b(\d[^ ]*)

    В общем виде будет как-то так:
    preg_match('/\b(\d[^ ]*)/', $product->name, $matches);
    Ответ написан
    1 комментарий
  • Image magic: как оптимизировать все изображения во всех подпапках разом?

    smilingcheater
    @smilingcheater
    Через команду find с передачей найденного файла как параметра в mogrify. Несколько лет назад сам таким занимался, сохранился вот такой сниппет, но уже не помню как точно он работает.
    find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" -iname "*.JPG" \) -exec jpegoptim -f -m80 -T10 --strip-all {} \; && 
    find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" -iname "*.JPG" \) -exec mogrify -verbose -format jpg -layers Dispose -resize 2048\>x2048\> -quality 80% {} +
    Ответ написан
    Комментировать
  • Как сверстать такой заголовок?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Как-то так
    Ответ написан
    1 комментарий
  • MODX REVO: Как узнать, кто пытается авторизоваться в админке?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Смысл блокать IP, если юзер может попробовать с другого устройства, использовать прокси и тд.
    Вы же можете просто удалить или переименовать юзера, через которого пытаются залогиниться в админке. Т.е. условно, если у вас стандартный admin, то переименуйте в условного mysiteadmin (это так к примеру).
    Также вы можете перенести админку. Вот первый попавшийся мануал
    Ответ написан
    1 комментарий
  • Почему не работает javascript после ajax получения ответа?

    Добрый день.
    Может это конечно и некропост, но все же я хотел написать по поводу 2го пункта, про событие jQuery.on().
    Везде написано
    $("div").on("click", function(){
    /** что то делается **/
    })

    Но более точное и правильное я нашел в сети, чтобы скрипт отрабатывал именно на подгруженных ajax элементах:
    $('ближайший_родительский_и_статический_элемент').on('событие', 'динамически_подгруженный_елемент', function(){
        // действия, которые надо выполнить
    });
    Ответ написан
    4 комментария
  • Почему не работает javascript после ajax получения ответа?

    Fernus
    @Fernus
    Техник - Механик :)
    Почему такой вариант не рассматривается?

    $(document).on('click', 'element', function () {
     // .. //
    });

    Я так пользуюсь давно...сам когда-то натыкался на это, но так же быстро решил...оказывается это прям ВОПРОС))

    Для извращенцев, вот так ещё можно:
    $(document).find('element').on('click', function () {
     // .. //
    });
    Ответ написан
    5 комментариев
  • Yii2: как получить страницу пагинации?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Это приватная переменная. Используй метод getPage() чтобы получить номер текущей страницы. Документация: https://www.yiiframework.com/doc/api/2.0/yii-data-...
    Ответ написан
    2 комментария
  • Как правильно сделать редирект со всего раздела, в новый раздел?

    shambler81
    @shambler81 Куратор тега htaccess
    Перенаправляет все содержимое каталогов http://site.ru/dir1/любое/любое → в site.ru dir2 /любое/любое .

    RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
    # если строка начинается с /dir1/ 
    RewriteRule ^(.*)$ /dir1%1 [R=301,L]

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

    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
    Ответ написан
    7 комментариев
  • VK API: как на php, автоматически вытягивать версию api?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    обновления можно найти тут https://dev.vk.com/reference/versions , тебе нужно сохранять последнюю минорную версию api и проверять наличие страницы новой версии
    if (@get_headers("https://dev.vk.com/reference/version/5.{++$minorVersion}")) {
        // сохраняем новое значение $minorVersion
    }
    Ответ написан
    1 комментарий
  • Yii2: где регистрируются объекты типа "$var::object"?

    @IvanMogilev
    Backend developer: Wordpress,Yii
    Тут
    Определяется соотсветсвенно в модели
    А что уже там возвращается зависит от логики статических свойств/методов в модели
    Ответ написан
    4 комментария
  • WordPress: как привязать кастомный тип записи к странице?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    1) Добавляется CPT (custom post type) - например Отзывы
    2) Через ACF добавляется поле чтобы указывать к какому товару прикрепить отзыв
    3) В нужно месте выводятся записи отзывов с указанием meta_key (в котором указывается к какому товару прикреплен отзыв) и значения meta_value (это ID текущего товара)

    Так получаются записи которые относятся к текущему товару. А дальше выводи как хочется.

    ACF: (пункт 2)
    Тип поля - Объект записи
    Фильтрация по типу записей - [тут выбрать нужный CPT]
    Ответ написан
    Комментировать
  • Как сделать редирект для последнего слага url, состоящего только из чисел?

    @dodo512
    В начало файла .htaccess добавить
    RedirectMatch 301 ^/(.+)/\d+/?$ /$1/
    Или
    RewriteEngine On
    
    RewriteRule ^(.+)/\d+/?$ /$1/ [R=301,L]
    Ответ написан
    1 комментарий
  • WP - слаги несуществующих страниц, состоящих только из цифр, отдают 200 отклик. Как от них избавиться?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    ну... это вордпресс. и это обычное явление. Так что ставь норм сео плагин. Он отдаст куда надо каноничесние - по ним ПС определит что главней. А так - чпу в ВП генерит кучу г*на. И только сео плагины или сео фреймворки это исправят. В ядре решения нет.
    а то что у тебя драфты или в корзине что завалялось - это не проблемы ВП. Он отдает что записано в его мозгу (читай в БД)
    Ответ написан
    1 комментарий
  • Почему неправильно отображается страница работы с инфоблоками битрикс?

    @Sangfroid Автор вопроса
    Молодой web Разработчик
    использую open server, решил проблему: в конфигурационном файле apache нужно закомментировать:
    <LocationMatch "/\.(?!well-known)">
        Require             all denied
    </LocationMatch>

    Должно получиться вот так:
    #<LocationMatch "/\.(?!well-known)">
        #Require             all denied
    #</LocationMatch>


    Всё происходит из-за того, что apache блокировал подключение файлов с точкой в начале
    Ответ написан
    2 комментария
  • Как парсить сайты на JS?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    <!-- Для примера -->
    <div id="data"></div>


    fetch('https://www.cbr.ru/currency_base/daily/')
      .then(response => response.text())
      .then(data => {
        const parser = new DOMParser();
        const pageDOM = parser.parseFromString(data, "text/html");
        const tableData = pageDOM.querySelector('.data');
        
        // Для примера	
        const dataElement = document.getElementById('data');
        dataElement.innerHTML = tableData;
    
        console.log(tableData)
      });


    P.S. вы можете прям щас зайти к ним на сайт, открыть панель разработчика, вкладку консоль и вставить туда js код. Получите в консоли таблицу с валютами.

    Для бека суть такая же, только вам придётся использовать свой парсер для DOM. А в остальном суть такая же
    Ответ написан
    6 комментариев
  • Как парсить сайты на JS?

    w3bsmes
    @w3bsmes
    Куратор тега «Глупые вопросы»
    1 комментарий
  • Почему CSS Grid не стоит делать?

    OtshelnikFm
    @OtshelnikFm
    Обо мне расскажет yawncato.com
    Но никто не написал почему крупные компании его не используют. Отвечу - потому что там правят балом маркетологи. Которые как последние с*чки цепляются даже за 0.1% прибыли. И др*чат своих техлидов чтоб они как погонщики гоняли своих прогеров, а те упарывались на флексах, флоатах ради этой самой поддержки отсталых компов, людей, нищебродов... зато на конфах потом поют о том ой какое зло то и это... А у самих интерфейс тупит (привет яндекс метрика с ее прелоадером и скелетоном - что за псих это сделал - бесит ждать типа ща все загрузится)
    Как то так. А по факту быстродействия - ну да там наверно и js бандл на 2 мегабайта тянется, который гзипом 500 килобайт весит, а потом распаковывается, выполняется... а вы говорите про то что css виноват. Виной всегда человеческий фактор. Врядли calc замедлит страницу. Это проверить легко - создавайте макет с 1000 калькуляций - и проверьте свои догадки
    Ответ написан
    1 комментарий