php – 使用.htaccess强制CodeIgniter中除一个目录以外的所有目录使用SSL

我意识到在这些方面存在很多问题,但在这一点上我已经阅读了几乎所有这些问题,我认为我的情况是独一无二的.

我基本上试图使用.htaccess来强制所有的HTTPS,但是对于一个目录(称为盗版)来说它是可选的.我以前做过这样的事情,但这次没合作.首先,我开始使用此代码,成功强制所有内容使用HTTPS.

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

  RewriteCond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$/index.PHP?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.PHP
</IfModule>

然后我添加了异常(我在这里只展示了第一条规则):

RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^(/pirate/) [NC]
RewriteRule ^(.*)$https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

应该这样做!所有控制器都应该转到HTTPS:

1) http://www.mysite.com/contact/ -> https://www.mysite.com/contact

校验.我的盗版控制器也应该能够做HTTPS:

2) https://www.mysite.com/pirate/ -> https://www.mysite.com/pirate/

没变.完善!最后,盗版控制器应该能够做好旧的HTTP:

3) http://www.mysite.com/pirate/ -> https://www.mysite.com/index.PHP?/pirate/

那是不对的.它仍然强制HTTPS,它停止隐藏index.PHP.总而言之,我有两个条件和规则.似乎第一个条件为真,第二个条件为假,则应用规则,然后应用第二个规则,然后返回301重定向.我知道这听起来很奇怪,但如果不是我就不会问.

为什么会发生这种情况,我该如何解决

解决方法:

您需要为控制器添加其他排除项,或在顶部添加passthrough.所以要么:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{SERVER_PORT} 80
  RewriteCond %{REQUEST_URI} !^/pirate/ [NC]
  RewriteCond %{REQUEST_URI} !^/index\.PHP [NC]
  RewriteRule ^(.*)$https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

  RewriteCond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$/index.PHP?/$1 [L]
</IfModule>

要么

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteRule ^index\.PHP$- [L]

  RewriteCond %{SERVER_PORT} 80
  RewriteCond %{REQUEST_URI} !^/pirate/ [NC]
  RewriteRule ^(.*)$https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

  RewriteCond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$/index.PHP?/$1 [L]
</IfModule>

重定向发生的原因是重写引擎循环.在原始URI被路由到index.PHP之后,重写引擎再次循环并且应用重定向规则并且路由的URI被重定向.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...