Проблема с ЧПУ при использовании SSL

Добрый день!

Переводил сайт с http на https и вроде бы все благополучно получилось при работе двух версий http и https. Но было необходимо сделать редирект с http на https, для этого я использовал директивы из стандартного файла htaccess:

# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
# https://www.domain.com when your cert only allows https://secure.domain.com
RewriteCond %{SERVER_PORT} !^443
RewriteRule (.*) https://мойсайт.com/$1 [R=301,L]
 
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Редирект работает отлично, но перестали работать ЧПУ, вместо каноничных мойсайт.com/news/ выдает мойсайт.com/?q=news/ (Обрезаются https). Если закомментировать редирект, то ЧПУ работают как надо и в http и в https версиях.
Так же пробовал подобный htaccess(и еще много других из поиска):

# HTTPS goes first, with ending [L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
 
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

С таким вариантом вообще сайт перестает работать поскольку происходит множественная переадресация.
Писал в службу поддержки хостинга на что получил ответ, что проблема не с их стороны.
Возможно кто-нибудь сталкивался с подобной проблемой или имеет какие-нибудь соображения на этот счет?
TiEdamn
09 ноября 2016, 21:19
modx.pro
1
2 988
0

Комментарии: 7

Илья Уткин
10 ноября 2016, 08:12
2
0
Попробуйте убрать редирект из htaccess и создать плагин на событие OnHandleRequest

<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
   return;
}
$uri = $_SERVER['REQUEST_URI'];
$http_host = $_SERVER['HTTP_HOST'];
$site_url = str_replace(array('www.', 'http://', 'https://', '/'), '', $modx->getOption('site_url'));
// for https set true
$https = true;
// robots.txt allways without redirect
if ($uri == '/robots.txt') return;
if ($http_host != $site_url || ($https && !$_SERVER['HTTPS'])) {
    if ($https) {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    $modx->sendRedirect($protocol.$site_url.$uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
    TiEdamn
    10 ноября 2016, 08:46
    0
    Видел ваш плагин еще когда пытался выяснить что я делаю не так здесь. Но вот какая странная вещь произошла, с главной страницы редиректит как надо, а любая внутренняя вызывает циклические переадресации, складывается такое впечатление что правило:

    # For Friendly URLs
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

    принудительно выполняет редирект обратно на http версию сайта.
TiEdamn
15 ноября 2016, 16:07
2
+1
Проблема решилась, в случае моего хостинга в файле htaccess требовалось указать следующие строки:

RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]

А именно без 3 и 4 строки ломались ЧПУ. Надеюсь кому-нибудь поможет, кто испытывает подобные проблемы.
    lexikon
    05 декабря 2016, 15:38
    0
    timeweb тоже самое, без данных строк https с ЧПУ не дружит
    Metallurg.IT
    31 марта 2018, 14:14
    0
    Для тех у кого на сервере не Apache, а Nginx + PHP-FPM https://modx.pro/help/8062/#comment-95807
      Маюри Шиина
      23 декабря 2020, 15:13
      0
      Хостинг activecloud http → https + fiendly URL

      RewriteEngine On
      RewriteBase /
      RewriteCond %{ENV:REDIRECT_STATUS} !^$
      RewriteRule .* — [L]

      RewriteCond %{SERVER_PORT} !^443
      RewriteRule (.*) site.by/$1 [R=301,L]

      # For Friendly URLs
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7