Codeigniter 4 默认.htaccess 文件查询
Codeigniter 4 default .htaccess file query
这对某些人来说可能听起来像是一个愚蠢的问题,但我只是在尝试为我的网站实施 SSL 证书时才注意到它。
'out of the box'.htaccess 文件中有一个默认值:
# Rewrite "www.example.com -> example.com"
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
我是否认为此代码会强制删除我网站上规范 link 的 www.
部分?
如果是这样 - 这真的是最佳做法吗?这就是为什么 Config/App.php
中的 base_url
示例是 http://example.com
的原因吗?
其次,正如我提到的,我正在尝试将此代码添加到 .htaccess 文件中以实施 SSL 证书并为每个 URL 强制执行 https
- 但它会导致错误,如果我使用 www.
(而它之前并没有导致错误)并且我的速度测试表明重定向很多,这会减慢一切:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
是否有人能够用 Config/App.php
文件中 base_url
的正确规范 link 结构为我指明正确的方向,我是否需要更改(或废弃)第一段代码,以及如何强制 https
使用我的 SSL 证书(以及 URL 中的 www.
)。
我更希望我的 URL 具有 https://www.example.com
的结构而不是 https://example.com
Am I right in thinking this code forces the removal of the www.
是,但仅限于 HTTP(非 HTTPS)请求,由第一个条件 %{HTTPS} !=on
。
如果您正在实施 HTTPS,那么您应该删除第一个条件并更改 RewriteRule
substitution 字符串以重定向到 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 子域?!
请注意,这是一个外部“重定向”,而不是您在评论中所说的内部“重写”。
If so - is this really best practice?
从SEO角度还是从技术角度?在 SEO 方面没有区别。使用 www
子域可以说具有一些技术优势(隔离 cookie 和暂存站点等)——尽管这主要是一个见仁见智的问题,取决于您的环境。这真的取决于你。对于某些域名,使用 www
子域 看起来 很麻烦。
但重要的是您选择一个或另一个并重定向到规范 URL 以避免潜在 重复内容问题。
使用域顶点(即没有 www 子域)只是 CodeIgniters default.
force https for every URL - but it's causing an error if I use 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,那么在重定向到万维网。当请求非规范 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 请求最多获得一个重定向。
您需要更新 CodeIgniter base_url
以符合您对 www 的偏好。
这对某些人来说可能听起来像是一个愚蠢的问题,但我只是在尝试为我的网站实施 SSL 证书时才注意到它。
'out of the box'.htaccess 文件中有一个默认值:
# Rewrite "www.example.com -> example.com"
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
我是否认为此代码会强制删除我网站上规范 link 的 www.
部分?
如果是这样 - 这真的是最佳做法吗?这就是为什么 Config/App.php
中的 base_url
示例是 http://example.com
的原因吗?
其次,正如我提到的,我正在尝试将此代码添加到 .htaccess 文件中以实施 SSL 证书并为每个 URL 强制执行 https
- 但它会导致错误,如果我使用 www.
(而它之前并没有导致错误)并且我的速度测试表明重定向很多,这会减慢一切:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
是否有人能够用 Config/App.php
文件中 base_url
的正确规范 link 结构为我指明正确的方向,我是否需要更改(或废弃)第一段代码,以及如何强制 https
使用我的 SSL 证书(以及 URL 中的 www.
)。
我更希望我的 URL 具有 https://www.example.com
的结构而不是 https://example.com
Am I right in thinking this code forces the removal of the
www.
是,但仅限于 HTTP(非 HTTPS)请求,由第一个条件 %{HTTPS} !=on
。
如果您正在实施 HTTPS,那么您应该删除第一个条件并更改 RewriteRule
substitution 字符串以重定向到 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 子域?!
请注意,这是一个外部“重定向”,而不是您在评论中所说的内部“重写”。
If so - is this really best practice?
从SEO角度还是从技术角度?在 SEO 方面没有区别。使用 www
子域可以说具有一些技术优势(隔离 cookie 和暂存站点等)——尽管这主要是一个见仁见智的问题,取决于您的环境。这真的取决于你。对于某些域名,使用 www
子域 看起来 很麻烦。
但重要的是您选择一个或另一个并重定向到规范 URL 以避免潜在 重复内容问题。
使用域顶点(即没有 www 子域)只是 CodeIgniters default.
force https for every URL - but it's causing an error if I use
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,那么在重定向到万维网。当请求非规范 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 请求最多获得一个重定向。
您需要更新 CodeIgniter base_url
以符合您对 www 的偏好。