【问题标题】:Codeigniter still shows index.php after forcing https强制 https 后 Codeigniter 仍然显示 index.php
【发布时间】:2018-10-15 22:01:09
【问题描述】:

刚刚使用 SSL 证书启动了我的网站。当我访问 https 站点时,它运行良好。但是,如果我只强制使用 http,即使在配置 htaccess 之后,它也会将我转发到 https 站点,但它会将 index.php?/ 添加到 url 的末尾。例如,如果我转到http://www.my-site.com,它会重定向到https://www.my-site.com/index.php?/。当然,该网站运行良好,只是在 url 字段中有点碍眼。

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

【问题讨论】:

  • $config['index_page'] ?
  • $config['index_page'] = '';

标签: php .htaccess codeigniter https base-url


【解决方案1】:

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

【讨论】:

  • 很高兴知道!我按照你说的做了,现在当我转到 my-site.com 时,它会重定向到 https,但页面显示 NO INPUT FILE SELECTED
  • 奇怪,当我删除 ?从 htaccess 中断
  • 它可以工作,但是当我尝试使用 http 访问该站点时,它的行为很奇怪。它重定向到 https,但它更改了 URI。例如,如果我访问 my-site.com/about/contact,它会重定向到 https,但会将 url 更改为 my-site.com/about/contact?/about/contact。唯一可以防止这种情况发生的方法是注释掉您建议以 RewriteCond %{HTTPS} off 开头的最后两行
  • 1.编辑 .htaccess 文件后,必须清除浏览器缓存。 2.关于?,说明代码写的期望在url中。通常我们不想要它。
  • 当我从RewriteRule ^(.*)$ /index.php?/$1 中删除问号时,它完全破坏了网站。我收到错误“未指定输入文件。”。这么奇怪。如果我取消注释最后两行(以RewriteCond %{HTTPS} off 开头),它可以工作,但它会更改 URI(例如 my-site.com/about/contact?/about/contact)。它将 URI 的副本添加到 URI 的末尾。
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2013-07-19
  • 2013-11-03
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多