Потому что вы говорите,
мой веб-сервер - машина с Ubuntu 16
Я предполагаю, что вы не используете общий сервер от хостинг-провайдера, и поэтому у вас есть полный доступ к файлам конфигурации Apache. Если это так, то вам не следует использовать файлы .htaccess. Прочитайте ЭТО и ЭТО , чтобы узнать, почему.
Я также предполагаю, что у вас есть набор файлов Apache, доступных для сайтов, которые определяют <VirtualHost>
конфиги. Он находится внутри тех блоков <VirtualHost>
, в которые вы должны поместить код, который у вас есть в .htaccess.
Чтобы перенаправить все http-запросы на https, попробуйте это как содержимое сайта «по умолчанию» в файле конфигурации «сайты доступны», например, "000-default.conf"
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
RedirectMatch 301 (.*) https://www.example.com$1
</VirtualHost>
Для этого нужно принять любой http-запрос и сразу же перенаправить его на https: URL. Если вы используете какой-либо другой порт, кроме стандартного: 80, настройте его соответствующим образом.
Как уже упоминалось, вы можете сделать переписывание в VirtualHost. Вот пример для конфигурационного файла https: (может быть назван так: «020-example-443.conf»)
<VirtualHost *:443>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/whatever
ServerAdmin web-boss@example.com
<Directory /var/www/whatever>
DirectoryIndex index.php
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [PT]
</Directory>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# Certificates delivered by certbot - your's maybe elsewhere
SSLCertificateFile /etc/letsencrypt/live/yoursite/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yoursite/privkey.pem
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
С их помощью вам не нужно будет делать ничего особенного в CodeIgniter, за исключением того, что, как вы уже делаете, используйте следующее
$config['base_url'] = 'https://www.example.com/';