принуждение Codeigniter HMVC использовать SSL - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть сборка сайта с Codeigniter HMVC. На моей локальной машине, используя Wamp, он работает так, как должен. Я хочу загрузить его на свой веб-сервер, который имеет сертификат SSL.

Независимо от того, что я пытаюсь, я не могу заставить веб-сайт работать на моем веб-сервере. Я попытался после этого: Как заставить ssl в codeigniter? Но ни одно из приведенных решений не работает в моей ситуации.

мой файл .htaccess выглядит так:

Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

в config.php codeigniter у меня есть:

$config['base_url'] = 'https://www.example.com/';

Мой веб-сервер - это машина Ubuntu 16 с Apache, использующая сертификат letsencrypt. Перезапись мода включена, но кроме этого это стандартная конфигурация.

Я попытался перенаправить с помощью ловушек, как указано в ссылке выше, но безрезультатно. Я также пробовал различную конфигурацию файла .htaccess, но также не дал никакого результата.

Есть ли кто-нибудь, у кого это работает на их сервере?

С уважением,

шлифовальная

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Потому что вы говорите,

мой веб-сервер - машина с 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/';
0 голосов
/ 08 ноября 2018

Вы должны добавить после RewriteEngine on

<IfModule mod_ssl.c>
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...