gpt4 book ai didi

php - 半 https 和无 www 版本的 CodeIgniter htaccess 修改

转载 作者:可可西里 更新时间:2023-10-31 23:05:24 24 4
gpt4 key购买 nike

与核心 PHP 不同,htaccess 修改有所不同。因此,经过一番搜索后,我找到了以下代码。

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

  • 在整个网站中严禁使用 www。即直接重定向到非 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 日)

# Strict to non-www version.
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{REQUEST_URI} (login|account_detail|alternate_address|update_password)
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,QSA]

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{REQUEST_URI} !(login|account_detail|alternate_address|update_password|https|css|img|js|resources|images)
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L,QSA]

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

# force HTTP
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !(login|account_detail|alternate_address|update_password|https|css|img|js|resources|images)
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [L]

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

当我打开这个链接时

https://example.com/login

它一直在循环,没有停止。在这个链接上 http://www.example.com/login它重定向到

https://login/login

最佳答案

分别处理 no-www 和 toggle-protocol 重定向更容易。在下面的例子中:

  1. www 请求按原样重定向到 no-www(在下一个请求时处理切换协议(protocol)重定向)
  2. 所选页面的http请求被重定向到https版本
  3. 其他页面的https请求重定向到http版本

请注意以下示例中的前导 /...(/|$)。它们确保匹配完整的路径片段(例如,在第三组规则中 /js/main.js 匹配但 /jsmith/profile 不匹配)。

RewriteEngine On

# Force NOWWW
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]

# Force HTTPS
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} /(login|account_detail|alternate_address|update_password)(/|$)
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

# Force HTTP
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !/(login|account_detail|alternate_address|update_password|css|img|js)(/|$)
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

# Hijack all requests
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 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

注意:测试完记得把302换成301

关于php - 半 https 和无 www 版本的 CodeIgniter htaccess 修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com