Codeigniter все еще показывает index.php после форсирования https - PullRequest
0 голосов
/ 05 мая 2018

Только что запустил мой сайт с сертификатом 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.

1 Ответ

0 голосов
/ 05 мая 2018

Третья строка htaccess должна быть:
RewriteRule ^(.*)$ index.php/$1
1. Во всяком случае, вопросительного знака (?) Быть не должно.
2. Флаг [L] означает последний. Когда это правило применяется, никакая другая директива не выполняется.
Итак, пятая строка никогда не запускается, но эта пятая строка удаляет index.php из URL.

...