Проблема с ЧПУ при использовании SSL
Добрый день!
Переводил сайт с http на https и вроде бы все благополучно получилось при работе двух версий http и https. Но было необходимо сделать редирект с http на https, для этого я использовал директивы из стандартного файла htaccess:
Редирект работает отлично, но перестали работать ЧПУ, вместо каноничных мойсайт.com/news/ выдает мойсайт.com/?q=news/ (Обрезаются https). Если закомментировать редирект, то ЧПУ работают как надо и в http и в https версиях.
Так же пробовал подобный htaccess(и еще много других из поиска):
С таким вариантом вообще сайт перестает работать поскольку происходит множественная переадресация.
Писал в службу поддержки хостинга на что получил ответ, что проблема не с их стороны.
Возможно кто-нибудь сталкивался с подобной проблемой или имеет какие-нибудь соображения на этот счет?
Переводил сайт с 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]
С таким вариантом вообще сайт перестает работать поскольку происходит множественная переадресация.
Писал в службу поддержки хостинга на что получил ответ, что проблема не с их стороны.
Возможно кто-нибудь сталкивался с подобной проблемой или имеет какие-нибудь соображения на этот счет?
Комментарии: 7
Попробуйте убрать редирект из 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'));
}
Видел ваш плагин еще когда пытался выяснить что я делаю не так здесь. Но вот какая странная вещь произошла, с главной страницы редиректит как надо, а любая внутренняя вызывает циклические переадресации, складывается такое впечатление что правило:
принудительно выполняет редирект обратно на http версию сайта.
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
принудительно выполняет редирект обратно на http версию сайта.
Тогда не знаю)
Проблема решилась, в случае моего хостинга в файле htaccess требовалось указать следующие строки:
А именно без 3 и 4 строки ломались ЧПУ. Надеюсь кому-нибудь поможет, кто испытывает подобные проблемы.
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]
А именно без 3 и 4 строки ломались ЧПУ. Надеюсь кому-нибудь поможет, кто испытывает подобные проблемы.
timeweb тоже самое, без данных строк https с ЧПУ не дружит
Для тех у кого на сервере не Apache, а Nginx + PHP-FPM https://modx.pro/help/8062/#comment-95807
Хостинг 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]
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]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.