[Помогите] Как настроить правильный .htaccess для HTTPS?

Тема в разделе "OpenCart", создана пользователем cotto51rus, 16 июл 2017.

  1. cotto51rus

    cotto51rus

    Регистрация:
    3 янв 2016
    Сообщения:
    232
    Симпатии:
    8
    Opencart 1.5.6.4
    Больше, чем пол года назад поставила сертификат SSL, до этого был .htaccess стандартный и ТИЦ поднимался постепенно, но после того, как установила HTTPS ТИЦ сразу упал, затем поднялся до 20 и все, уже полгода на одном месте. На сайтах проверяла и везде пишет склейку доменов.
    В Яше и Гугле все страницы давным давно переиндексировались и http уже нет
    .htaccess не сама настраивала, обращалась к фрилансерам
    Подскажите, пожалуйста, как правильно настроить .htaccess именно для HTTPS? Т.е убрать эту склейку, скорее всего она тормозит ТИЦ. Заранее благодарю!
    Код:
    #php_value sesion.save_path /home/c/***/***/tmp
    Options +FollowSymlinks
    
    # Prevent Directoy listing
    Options -Indexes
    
    <FilesMatch "\.(tpl|ini|log)">
    Order deny,allow
    Deny from all
    </FilesMatch>
    
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteBase /
    RewriteRule ^(contact)$ index.php?route=information/$1
    RewriteRule ^(account/return/insert)$ index.php?route=$1
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^product-reviews$ index.php?route=product/allreviews [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]
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteCond %{QUERY_STRING} ^route=common/home$
    
    ErrorDocument 404 /
    ErrorDocument 403 /
    
    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
    
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
     php_flag register_globals off
    
    # 2. If your cart has magic quotes enabled, This may work to disable it:
     php_flag magic_quotes_gpc Off
    
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200
    
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    
    # 7. disable open_basedir limitations
    # php_admin_value open_basedir none
    
    php_flag display_errors off
    php_flag display_startup_errors off
    
    # compress text, HTML, JavaScript, CSS, and XML
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    
    # remove browser bugs
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    Header append Vary User-Agent
    
    ## EXPIRES CACHING ##
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType text/javascript "access plus 1 year"
    ExpiresByType text/css "access plus 7 day"
    ExpiresByType text/html "access plus 7 day"
    ExpiresByType text/x-javascript "access 1 year"
    ExpiresByType image/gif "access plus 1 week"
    ExpiresByType image/png "access plus 1 week"
    ExpiresByType image/jpeg "access plus 1 week"
    ExpiresByType image/jpg "access plus 1 week"
    ExpiresByType application/pdf "access plus 1 week"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType application/x-shockwave-flash "access plus 7 day"
    ExpiresDefault "access plus 1 week"
    
    # Cache-Control
    
    <ifModule mod_headers.c>
    
    # 30 суток
    <filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    
    # 30 суток
    <filesMatch ".(css|js)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    
    # 2 суток
    <filesMatch ".(xml|txt)$">
    Header set Cache-Control "max-age=172800, public, must-revalidate"
    </filesMatch>
    
    # 1 сутки
    <filesMatch ".(html|htm|php)$">
    Header set Cache-Control "max-age=172800, private, must-revalidate"
    </filesMatch>
    </IfModule>
    ## EXPIRES CACHING ##
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Склейка ничего не тормозит. Она как раз и гарантирует, что весь ТИЦ, который был на http версии перейдёт на https.


    Которые в .htaccess понимают не больше вас. Тут с редиректами полнейшая каша!

    Есть несколько простых правил (что-то из этого касается любого движка, остальное - только ОК).
    1. Блок редиректов всегда начинается с этих двух строк, которые идут подряд:
    Код:
    RewriteEngine on
    RewriteBase /
    Если движок установлен не в корне домена, то вместо слеша путь от корня домена до директории движка.

    2. В случае ОК все редиректы (что связанные с https или www, что связанные с сайтмапом или ещё какими-то конкретными перенаправлениями) должны обязательно быть до этого блока строк:
    Код:
    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]
    Иначе можно получить самые разнообразные глюки со ссылками.

    3. Порядок строк имеет значение и RewriteCond не может просто болтаться без следующей за ней RewriteRule, потому что RewriteCond - это только проверка определённого условия, за которой должно следовать действие на случай успешного прохождения проверки.
    Исходя из этого, последняя строка в блоке редиректов сейчас не имеет смысла.

    4. Если у вас есть редирект с www на без www и сайт использует https - обязательно редирект должен быть сразу на https версию (а у вас сейчас на http) иначе получиться, что при заходе с www по http вместо одного редиректа будет два последовательных.

    Ну, и очень желательно располагать все редиректы в логической последовательности от более глобальных (https или www) и до редиректов отдельной страницы.

    Основываясь на всём вышесказанном блок редиректов должен выглядеть так:
    Код:
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    
    RewriteCond %{QUERY_STRING} ^route=common/home$
    RewriteRule ^(.*)$ https://%{HTTP_HOST} [R=301,L]
    
    RewriteRule ^(contact)$ index.php?route=information/$1
    RewriteRule ^(account/return/insert)$ index.php?route=$1
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^product-reviews$ index.php?route=product/allreviews [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]
    
    Вот это и есть правильный .htaccess с точки зрения всех редиректов. Но рост ТИЦ он не гарантирует никоим образом. Максимум, что он может хоть как-то обеспечить - это восстановление того ТИЦ, который был до перехода на https.
     
    shede и cotto51rus нравится это.
  3. cotto51rus

    cotto51rus

    Регистрация:
    3 янв 2016
    Сообщения:
    232
    Симпатии:
    8
    Большое спасибо! Буду разбираться
    --- Добавлено, 17 июл 2017 ---
    Сделала по Вашей рекомендации, только вот не пойму, точнее не обращала внимания, у меня почему то на сайте значек в гугле хроме браузере показывает, что мол сайт защищен не полностью. Может быть у меня что-то лишнее в файле, что совсем не нужно и мешает?
    На сайте использую memcaсhe, а в файле вижу, что про файловый кеш написано.
    К сожалению не я файл правила и для чего там были прописаны дополнения вообще не понимаю, единственное я сама прописывала в конфиге использование memcaсhe, вместо Файлового кеша, т.к. поставила модуль BOOST (лицензию)

    Сравнила с родным файлом .htaccess, который при установке получается, у меня файл намного больше, вот и думаю, может что удалить из файла, что у меня здесь ненужное?

    Упорядочила так:
    Код:
    #php_value sesion.save_path /home/c/cotto36k/new-loress/tmp
    Options +FollowSymlinks
    
    # Prevent Directoy listing
    Options -Indexes
    
    # Prevent Direct Access to files
    <FilesMatch "\.(tpl|ini|log)">
    Order deny,allow
    Deny from all
    </FilesMatch>
    
    # SEO URL Settings
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    RewriteRule ^(contact)$ index.php?route=information/$1
    RewriteRule ^(account/return/insert)$ index.php?route=$1
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^product-reviews$ index.php?route=product/allreviews [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]
    
    RewriteCond %{QUERY_STRING} ^route=common/home$
    
    ErrorDocument 404 /
    ErrorDocument 403 /
    
    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
    
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
     php_flag register_globals off
    
    # 2. If your cart has magic quotes enabled, This may work to disable it:
     php_flag magic_quotes_gpc Off
    
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200
    
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    
    # 7. disable open_basedir limitations
    # php_admin_value open_basedir none
    
    php_flag display_errors off
    php_flag display_startup_errors off
    
    # compress text, HTML, JavaScript, CSS, and XML
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    
    # remove browser bugs
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    Header append Vary User-Agent
    
    ## EXPIRES CACHING ##
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType text/javascript "access plus 1 year"
    ExpiresByType text/css "access plus 7 day"
    ExpiresByType text/html "access plus 7 day"
    ExpiresByType text/x-javascript "access 1 year"
    ExpiresByType image/gif "access plus 1 week"
    ExpiresByType image/png "access plus 1 week"
    ExpiresByType image/jpeg "access plus 1 week"
    ExpiresByType image/jpg "access plus 1 week"
    ExpiresByType application/pdf "access plus 1 week"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType application/x-shockwave-flash "access plus 7 day"
    ExpiresDefault "access plus 1 week"
    
    # Cache-Control
    
    <ifModule mod_headers.c>
    
    # 30 суток
    <filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    
    # 30 суток
    <filesMatch ".(css|js)$">
    Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    
    # 2 суток
    <filesMatch ".(xml|txt)$">
    Header set Cache-Control "max-age=172800, public, must-revalidate"
    </filesMatch>
    
    # 1 сутки
    <filesMatch ".(html|htm|php)$">
    Header set Cache-Control "max-age=172800, private, must-revalidate"
    </filesMatch>
    </IfModule>
    ## EXPIRES CACHING ##
    --- Добавлено, 17 июл 2017 ---
    loress.ru
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Это никак не связано с .htaccess!
    Указание на неполную защищённость означает, что у вас на странице есть какой-то контент, который грузится по http. Это может быть, например, изображение вставленное в описание товара через визуальный редактор в админке. Такое исправляется только вручную, потому что ссылка не генерируется через ОК.
    Я сейчас посмотрел у вас главную страницу, случайную категорию и случайный товар - нигде проблем нет.

    А если вы увидите в рецепте салат масло, вы туда машинное нальёте? Кеши бывают разные и для разного. Всё, что связано с кешами в .htaccess - относится к кешированию файлов браузером и memcaсhe тут никаким боком не может быть альтернативой.

    Зачем вы оставили вот эту строку болтаться:
    Код:
    RewriteCond %{QUERY_STRING} ^route=common/home$
    ?

    Во-первых, перечитайте пункт 2 в моём предыдущем сообщении, а затем прочитайте и пункт 3. А во-вторых, я же привёл этот редирект в рабочем виде, но вы его почему-то проигнорировали.

    У вас здесь пол файла - это ненужное! У вас на сервере за статику отвечает nginx, а потому всё связанное с кешированием и сжатием не имеет смысла. Можете удалить всё начиная со строки:
    Код:
    # compress text, HTML, JavaScript, CSS, and XML
    и до конца файла.
     
  5. K.e.H

    K.e.H

    Регистрация:
    28 апр 2016
    Сообщения:
    26
    Симпатии:
    0
    Можете мой проверить?
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Правила для кеширования и сжатия статики имеют смысл только если этим занимается Апач, а я на 99% уверен, что у вас этим занимается nginx. Если сайт не на VDS, то доступа к конфигам nginx у вас нет, так что просите хостера это настроить.

    У вас дважды в файле
    Код:
    RewriteEngine On

    Вот этот блок:
    Код:
    # Редирект c www на без www
    
    RewriteCond %{HTTP_HOST} ^www.farm-apteka.com
    
    RewriteRule ^(.*)$ http://farm-apteka.com/$1 [R=301,L]
    Во-первых, в неправильном месте (об этом я выше уже подробно расписал), а во-вторых, не имеет смысла, ибо у вас уже есть код, который за это отвечает, вот он:
    Код:
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    И всё, что дальше этого блока тоже в неправильном месте.
    Внимательно перечитайте это моё сообщение: https://wmasteru.org/threads/Как-настроить-правильный-htaccess-для-https.25172/#post-183508
     
  7. corsaro

    corsaro

    Регистрация:
    8 мар 2015
    Сообщения:
    49
    Симпатии:
    0
    Всем привет. Не могу понять что произошло/ Некоторое время назад появился хвост /index.php?route=common/home Причем получается зеркало ведет на этот урл. Кто может помочь платно?