Codeigniter在强制https

时间:2018-05-05 16:09:35

标签: php .htaccess codeigniter https base-url

刚刚使用SSL证书启动了我的网站。当我访问https网站时,它完美无缺。但是,如果我强制使用http,即使在配置htaccess之后,它也会将我转发到https网站,但它会将index.php?/添加到网址的末尾。例如,如果我转到http://www.my-site.com,则会重定向到https://www.my-site.com/index.php?/。当然,该网站工作正常,它只是在网址领域的一点点。

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]

我在研究了访问者使用http访问网站后如何强制https后添加了最后两行。

我错过了什么? htaccess不是我的强项。它是共享访问权限,否则我会编辑我的httpd.conf

编辑: 更新后的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 :(得分:2)

htaccess的第三行应该是:
RewriteRule ^(.*)$ index.php/$1
无论如何,问号(?)不应该存在 2. [L]标志表示最后一个。应用此规则时,不会运行其他指令 所以,第五行永远不会运行,但第五行是从url中删除index.php的行。