Гадаю по htaccess

Тема в разделе "Настройка сайта", создана пользователем MAzZY, 12 апр 2020.

  1. MAzZY

    MAzZY Генератор идей

    "Что было, что будет, чем сердце успокоится".

    Беглый анализ ряда ваших сайтов показал, что частенько в этом самом htaccess находятся инструкции, которых там быть не должно. Они туда попали либо по незнанию, либо по незлому умыслу. Но всё равно - одинаково вредны.

    Правила просты: в эту тему желающие выкладывают содержимое своих файлов htaccess, обрамив их тегами code (на панели редактора Вставить - Код).

    Что не надо выкладывать:
    1) стандартные файлы движков
    2) адреса своих сайтов предварительно заменяйте на site
    3) строки, добавленные в файл плагинами. Они обычно обрамлены комментариями с указанием названия плагина

    По мере свободного времени я буду оценивать это и давать рекомендации.
     
    #1
    Sangina, Elenika, Irene_louca и 3 другим нравится это.
  2. Vera_Karpova

    Vera_Karpova Webmaster

    Тогда я первая =)

    Код:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
     
    Vera_Karpova, 12 апр 2020
    #2
  3. MAzZY

    MAzZY Генератор идей

    Первый блин пошёл.
    Все увидели, больше так не сделают
     
    #3
    Миловица, puma и Vera_Karpova нравится это.
  4. Vera_Karpova

    Vera_Karpova Webmaster

    Я вообще не сильная во всем этом, поэтому что такое "стандартные файлы движков", не знаю. Это все, что есть в моем htaccess.
     
    Vera_Karpova, 12 апр 2020
    #4
  5. Порсена

    Порсена Well-Known Member

    Я не уверена, что вы разберетесь, ведь у меня движок DLE, но если что-то насторожит, то сообщите.
    Сама поставила только 3 и 4 строчку - редирект без www и редирект на https
    Весь остальной код был в движке, его я не меняла, не убирала.

    Код:
    DirectoryIndex index.php
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
    RewriteRule ^page/([0-9]+)(/?)$ index.php?cstart=$1 [L]
    
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html$ index.php?mod=print&subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 [L]
    
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html$ index.php?mod=print&news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/([0-9]+)-(.*).html$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    
    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html$ index.php?mod=print&news_page=$1&newsid=$2&seourl=$3 [L]
    RewriteRule ^([0-9]+)-(.*).html$ index.php?newsid=$1&seourl=$2 [L]
    
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
    
    RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
    
    RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
    RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
    
    RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [B,L]
    RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [B,L]
    
    RewriteRule ^xfsearch/(.*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [B,L]
    RewriteRule ^xfsearch/(.*)/?$ index.php?do=xfsearch&xf=$1 [B,L]
    
    RewriteRule ^user/([^/]*)/rss.xml$ index.php?mod=rss&subaction=allnews&user=$1 [L]
    RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
    RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
    RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
    RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
    RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ index.php?mod=rss&subaction=allnews&user=$1 [L]
    
    RewriteRule ^lastnews(/?)+$ index.php?do=lastnews [L]
    RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
    
    RewriteRule ^catalog/([^/]*)/rss.xml$ index.php?mod=rss&catalog=$1 [L]
    RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
    RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
    
    RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
    RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
    
    RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
    RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]
    
    RewriteRule ^rules.html$ index.php?do=rules [L]
    RewriteRule ^statistics.html$ index.php?do=stats [L]
    RewriteRule ^addnews.html$ index.php?do=addnews [L]
    RewriteRule ^rss.xml$ index.php?mod=rss [L]
    RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
    RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^.]+)/rss.xml$ index.php?mod=rss&do=cat&category=$1 [L]
    RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1&seourl=$2 [L]
    RewriteRule ^print:([^/]+).html$ index.php?mod=print&do=static&page=$1&seourl=$1 [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+).html$ index.php?do=static&page=$1&seourl=$1 [L]
     
    Порсена, 12 апр 2020
    #5
  6. MAzZY

    MAzZY Генератор идей

    Какой у Вас хостер? Большинство известных мне хостеров имеют настройку редиректа в панели. Это надёжнее, чем Ваш вариант, и быстрее.

    Есть многое в природе, друг Горацио,
    Что и не снилось нашим мудрецам. (с)

    Раз это штатный код движка, то обсуждать тут нечего. Вопрос о том, зачем кому-то движок с такой горой инструкций для сверхмедленного Апача, оставим для другой темы.
     
    #6
    Порсена нравится это.
  7. Порсена

    Порсена Well-Known Member

    У меня бегет. Не знаю как делать редирект в панеле.
     
    Порсена, 12 апр 2020
    #7
  8. MAzZY

    MAzZY Генератор идей

    Сайты - шестерёнка у нужного сайта - включить тут
    upload_2020-4-12_20-12-53.png
     
    #8
    Порсена нравится это.
  9. Ветреница

    Ветреница Webmaster

    А если редирект делается с другой целью? Например, перенос статьи на другой домен.
     
    Ветреница, 12 апр 2020
    #9
  10. MAzZY

    MAzZY Генератор идей

    [​IMG]
     
    #10
  11. Seremetra

    Seremetra Well-Known Member

    А если "в этом самом htaccess находИЛИсь инструкции, которых там быть не должно…", а потом htaccess снова сменился на стандартный, это сильно больно будет для сайта? ))
     
    Seremetra, 13 апр 2020
    #11
  12. MAzZY

    MAzZY Генератор идей

    Каждая ситуация очень индивидуальна. Вот в случае Порсены, например, удаление тех строк и включение опции в панели хостинга будет не сильно заметно, но всё же немного ускорит работу сайта и устранит непредсказуемые последствия.
    В другом же случае, который мы разбирали в закрытом разделе, выдача страниц ускорилась вдвое после удаления явно лишних инструкций.
    Вот как-то так.
     
    #12
    Seremetra нравится это.
  13. MAzZY

    MAzZY Генератор идей

    Попробую кратко внести ясность в процесс формирования страниц, чтобы вы понимали принцип, хотя бы в общих чертах.
    Предупреждение: это чисто условная схема, показывающая лишь суть, она не может быть использована как учебное пособие. "Трюки выполнены профессионалами, не повторяйте их дома"

    1) Посетитель запрашивает страницу site.ru/folder1/folder2/index.php (Важно! Это физически существующие папки на диске, а не таксономия движка)
    2) Запрос обрабатывает nginx (быстрый сервис):
    1. читает свои настройки из памяти и применяет их к запросу
    2. проверяет наличие кэша и возможность его выдачи
    3. передаёт запрос на Apache
    3) Запрос обрабатывает Apache (крайне медленный сервис):
    1. читает свои настройки из памяти и применяет их к запросу
    2. читает настройки в htaccess в каждой(!) папке по пути, сравнивает их с серверными, удаляет взаимоисключающие, отдавая предпочтение тем, что в файле(!)
    3. передаёт запрос на php
    4) php генерирует html страницу и по обратной цепочке отдаёт посетителю
    5) браузер принимает готовую страницу и начинает её собирать - по мере вывода на экран пользователя браузер вызывает все дополнительные файлы (скрипты, стили, картинки), которые указаны в коде страницы. Причём делает это в порядке следования инструкций - сверху вниз. Для каждого отдельного файла на сервер отправляется отдельный запрос, который проходит точно такую же цепочку и точно так же обрабатывается.
    6) посетитель получает готовую страничку (если повезло)

    Особо хочу обратить внимание на пункт 3.2. Он выполняется для каждого файла из запроса - скрипты, стили, картинки, шрифты и т.д. Именно поэтому важно не делать в файлах htaccess длинных инструкций. И именно поэтому так важно, чтобы все файлы выдавали 304 при повторном запросе - в таком случае браузер просто получит этот статус от nginx, возьмёт файл из своего (браузерного) кэша и успокоится на этом.

    На nginx невозможно влиять со стороны сайта - он чисто серверный. Поэтому он очень быстрый и сейчас везде рекомендуется как основной и единственный веб-сервер, т.е. без использования Apache. Но на шаред хостингах такое практически невозможно из-за того, что… барабанная дробь… на nginx невозможно влиять со стороны сайта :) Под каждый сайт требуется индивидуальная настройка.

    На своём сервере я проверял замеры - устранение Apache ускоряет выдачу тяжёлой страницы на высоконагруженном сайте втрое: с более чем 10 секунд до 3 секунд (и это без 304). Безусловно, важную роль в этом играет кэширование со стороны движка, но об этом мы поговорим в следующей серии.
     
    #13
    Порсена, Elenika, metaweb и 3 другим нравится это.