强制Codeigniter HMVC使用SSL

时间:2018-11-08 14:27:14

标签: apache codeigniter ssl

我有一个使用Codeigniter HMVC构建的网站。在我使用Wamp的本地计算机上,它可以正常运行。我想将其上传到具有SSL证书的Web服务器。

无论我尝试什么,我都无法使网站在我的Web服务器上运行。我试过以下: How to force ssl in 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]

在codeigniter的config.php中,我有:

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

我的网络服务器是一台使用apache的ubuntu 16机器,使用来信加密证书。启用了mod rewrite,但除此之外是标准配置。

我已经尝试了上面的链接中提到的使用钩子进行重定向,但无济于事。我也尝试了各种.htaccess文件配置,但也没有结果。

有人在服务器上运行此程序吗?

致谢,

桑德

2 个答案:

答案 0 :(得分:1)

因为你说,

  

我的网络服务器是ubuntu 16机器

我假设您没有使用主机提供商提供的共享服务器,因此您可以完全访问Apache的配置文件。如果是这样,则您不应使用.htaccess文件。阅读THISTHIS以了解原因。

我还假设您有一组定义<VirtualHost>配置的Apache“站点可用”文件。在这些<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/';

答案 1 :(得分:0)

您必须在RewriteEngine on之后添加

<IfModule mod_ssl.c>
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>