Только что запустил мой сайт с сертификатом SSL. Когда я захожу на сайт https, он работает отлично. Однако, если я принудительно установлю http, даже после настройки htaccess, он перенаправит меня на сайт https, но к концу URL добавит index.php?/
. Например, если я иду на http://www.my-site.com
, он перенаправляет на https://www.my-site.com/index.php?/
. Конечно, сайт работает нормально, это всего лишь небольшая боль в поле URL.
Переменная base_url выглядит так:
$config['base_url'] = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 's' : '').'://'.$_SERVER['HTTP_HOST'].str_replace('//','/',dirname($_SERVER['PHP_SELF']).'/');
Мой .htaccess выглядит так:
RewriteEngine on
RewriteCond $1 !^(index\.php?|_assets|robots\.txt|sitemap\.xml|favicon\.ico?)
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Я добавил последние 2 строки после исследования того, как принудительно устанавливать https, когда посетитель заходит на сайт с http.
Чего мне не хватает? htaccess не моя сильная сторона. Это общий доступ, в противном случае я бы отредактировал свой httpd.conf
EDIT:
Обновлено htaccess
выглядит так:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Технически это работает, но по какой-то причине, когда я захожу на сайт с помощью http
, он перенаправляет на версию https
, но до конца объединяет еще одну копию моего URI. Например, если я иду на http://example.com/products
, он перенаправляет на https://example.com/products?/products
.