php - Codeigniter 4 默认 .htaccess 文件查询
问题描述
对某些人来说,这听起来像是一个愚蠢的问题,但我只是在尝试为我的网站实施 SSL 证书时才注意到它。
“开箱即用” .htaccess 文件中有一个默认值:
# Rewrite "www.example.com -> example.com"
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
我是否认为这段代码会强制删除www.
我网站上的部分规范链接?
如果是这样 - 这真的是最佳做法吗?这就是为什么 is 中的base_url
示例?Config/App.php
http://example.com
其次,正如我所提到的,我正在尝试将此代码添加到 .htaccess 文件中以实现 SSL 证书并强制https
每个 URL - 但如果我使用它会导致错误www.
(而它之前没有导致错误)和我的速度测试表明重定向很多,这会减慢一切:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
base_url
是否有人能够使用文件中正确的规范链接结构为我指明正确的方向Config/App.php
,是否需要更改(或废弃)第一段代码,以及如何强制https
使用我的 SSL 证书(以及www.
在我的网址中)。
我宁愿我的 URL 的结构https://www.example.com
是https://example.com
解决方案
我认为这段代码是否会强制删除
www.
是的,但仅适用于 HTTP(不是 HTTPS)请求,由第一个条件控制%{HTTPS} !=on
。
如果您正在实施 HTTPS,那么您应该删除第一个条件并将RewriteRule
替换字符串更改为重定向到https://...
. 但是,如果您想重定向到,www
那么您还需要反转逻辑:
# Redirect "example.com -> www.example.com"
# (In fact, redirect hostname that does not start "www.")
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
虽然,如果您有其他子域,这种特定方法(正如我在评论中暗示的那样)不一定有效,除非您希望所有子域都有 www 子子域?!
请注意,这是外部“重定向”,而不是您在评论中所述的内部“重写”。
如果是这样 - 这真的是最佳做法吗?
在搜索引擎优化方面还是从技术角度?在SEO方面没有区别。使用www
子域可以说具有一些技术优势(隔离 cookie 和登台站点等) - 尽管这主要是一个见仁见智的问题,并且取决于您的环境。这真的取决于你。对于某些域名,使用www
子域看起来很麻烦。
但重要的是您选择其中一个并重定向到规范 URL,以避免潜在的重复内容问题。
使用域顶点(即没有 www 子域)只是 CodeIgniters default。
为每个 URL 强制 https - 但如果我使用它会导致错误
www.
澄清一下,您实施的 SSL 证书必须包括域顶点,即。exmaple.com
和 www 子域,即。www.example.com
. 否则,在请求“其他”(非 SSL)主机名时,您自然会收到浏览器安全警告。
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
此代码通常可以强制 HTTP 到 HTTPS(前提是您的应用程序服务器上安装了 SSL 证书,即您没有使用前端 SSL 代理或非标准实现)。但是,您将此规则与上述规则相关的顺序将取决于您是否打算实施HSTS。
如果您打算实现 HSTS,那么您需要先重定向到同一主机上的 HTTPS ,然后再重定向到 www。当请求非规范http://example.com/
(但这不是“坏”)时,这将导致不可避免的双重重定向。
例如:
# 1. Redirect to HTTPS on the same host
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. Redirect to non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但是,如果您不打算实施 HSTS,那么您可以颠倒上述两条规则,并为任何非规范 URL 请求获得最多一个重定向。
您需要更新 CodeIgniterbase_url
以匹配您对 www 的偏好。
推荐阅读
- php - 用户注册表单 Wordpress 显示错误:“NONCE ERROR,PLEASE RELOAD”
- java - 删除尾随的“00”和斜杠
- angular - 如何在 Mat Table 中填充 FormArray?
- bash - 如何在 Cloudera QuickStart Terminal 中编写多行代码?
- sql - 从记录列表中获取当前生效日期在 SQL Server 中具有过去和未来的日期
- angular - 发生未处理的异常:工作区中未设置配置“dev”
- android - Android 6 AudioManager 返回错误的 RingerMode
- python - 在情节中使用熊猫数据框的条形图
- c# - 我如何才能访问我的 System.Collections.Generic.List`1 [mySolution.Models.PermissionsModel] 类型的会话并进行一些测试
- javascript - splice 不删除当前元素