我有一个使用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文件配置,但也没有结果。
有人在服务器上运行此程序吗?
致谢,
桑德
答案 0 :(得分:1)
因为你说,
我的网络服务器是ubuntu 16机器
我假设您没有使用主机提供商提供的共享服务器,因此您可以完全访问Apache的配置文件。如果是这样,则您不应使用.htaccess文件。阅读THIS和THIS以了解原因。
我还假设您有一组定义<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>