Php CodeIgniter htaccess修改,用于半https和无www版本

Php CodeIgniter htaccess修改,用于半https和无www版本,php,apache,.htaccess,codeigniter,Php,Apache,.htaccess,Codeigniter,htaccess修改与核心PHP不同。 因此,经过一些搜索,我得到了以下代码 在此之前,, 我的要求在我的项目中是标准的 整个网站严禁使用www。i、 e.直接重定向到非www版本 HTTPS适用于某些页面。(签出,登录页面)。对其他页面严格使用HTTP 删除CodeIgniter的默认index.php 这是我的密码 RewriteEngine on ################################# # force HTTPS RewriteCond %{HTTPS}

htaccess修改与核心PHP不同。 因此,经过一些搜索,我得到了以下代码

在此之前,, 我的要求在我的项目中是标准的

  • 整个网站严禁使用www。i、 e.直接重定向到非www版本
  • HTTPS适用于某些页面。(签出,登录页面)。对其他页面严格使用HTTP
  • 删除CodeIgniter的默认index.php
这是我的密码

RewriteEngine on

#################################
# force HTTPS
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} (checkout|login)
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force HTTP
RewriteCond %{HTTPS} =on
#RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{REQUEST_URI} !(checkout|login|css|img|js)
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Strict to non-www version >>> Not Working
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/$1 [R=301,NE,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [L] 
问题:无法访问网站非www版本的结果


更新(10月17日)

在这个新的更新代码中,htaccess测试站点完美地显示了所有内容。 但是,在更新到站点后,存在许多问题

当我打开这个链接时

https://example.com/login
它不停地循环。 在这个链接上 它重定向到

https://login/login

单独处理无www和切换协议重定向更容易。在以下示例中:

  • www请求被重定向到无www原样(下一个请求时句柄切换协议重定向)
  • 所选页面的http请求将重定向到https版本
  • 对其他页面的https请求被重定向到http版本
  • 请注意以下示例中的前导
    /…(/|$)
    。它们确保匹配完整的路径片段(例如,在第三组规则中
    /js/main.js
    匹配,但
    /jsmith/profile
    不匹配)

    重新编写引擎打开
    #立即生效
    重写cond%{HTTP_HOST}^www\(.+)[NC]
    重写规则^http://%1%{REQUEST_URI}[R=302,L]
    #强制HTTPS
    RewriteCond%{HTTPS}=off
    重写cond%{REQUEST_URI}/(登录|帐户|详细信息|备用|地址|更新|密码)(/|$)
    重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[R=302,L]
    #强制HTTP
    RewriteCond%{HTTPS}=on
    重写cond%{REQUEST_URI}/(登录|账户|详细信息|备用|地址|更新|密码| css | img | js)(/|$)
    重写规则^http://%{http_HOST}%{REQUEST_URI}[R=302,L]
    #劫持所有请求
    重写cond%{REQUEST_FILENAME}-F
    重写cond%{REQUEST_FILENAME}-D
    重写规则。*index.php/$0[L]
    
    以下测试通过:

    http://www.example.com/
    http://example.com/
    http://www.example.com/a/b?c=3&d=4
    http://example.com/a/b?c=3&d=4
    http://www.example.com/login
    http://example.com/login
    https://example.com/login
    https://www.example.com/js/javascript.js
    https://example.com/js/javascript.js
    http://example.com/js/javascript.js
    

    注意:测试后记得用301替换302。

    尝试
    RewriteRule^(.*)$http://%1/$1[R=301,L,QSA]
    bro您能详细说明一下,我可以在哪里添加这一行,还是应该用什么替换,因为您给出的建议我以前尝试过,但没有用。这就像我缺少一些行或缺少一些排序。而不是
    RewriteRule^(.*)$http://%1%{REQUEST_URI}/$1[R=301,NE,L]
    Nope。它不是从链接中删除www。您的.htaccess在哪里?在某个文件夹或网站的根目录中?如果在根目录中,那么问题就出在其他地方,因为我编写的规则正在运行。您可以在这里尝试,例如,启用重写规则的日志记录并查看日志。非常感谢您提供了“几乎正确”的回复。但我仍然在两个案例中面临这个问题。► <代码>https://www.example.com指向相同的url,而只应指向
    http://example.com
    ► <代码>https://example.com指向同一个url,而应该只指向
    http://example.com
    。通常,https案例是创建问题而不是重定向。
    Force NOWWW
    规则应将www重定向到no www,而
    Force HTTP
    规则应将https重定向到HTTP。您是否可以再次检查(i)HTTPS网站使用相同的htaccess文件(ii)没有浏览器缓存问题(将随机查询字符串附加到URL或空浏览器缓存以进行测试)。
    https://login/login