Php CodeIgniter htaccess修改,用于半https和无www版本
htaccess修改与核心PHP不同。 因此,经过一些搜索,我得到了以下代码 在此之前,, 我的要求在我的项目中是标准的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}
- 整个网站严禁使用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和切换协议重定向更容易。在以下示例中:
/…(/|$)
。它们确保匹配完整的路径片段(例如,在第三组规则中/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