为了账号安全,请及时绑定邮箱和手机立即绑定

Codeigniter 4默认.htaccess文件查询

Codeigniter 4默认.htaccess文件查询

PHP
交互式爱情 2023-07-30 12:51:08
对于某些人来说,这可能听起来是一个愚蠢的问题,但我只是在尝试为我的网站实施 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.我网站上的部分规范链接是否正确?如果是这样 - 这真的是最佳实践吗?这就是isbase_url中的例子的原因吗?Config/App.phphttp://example.com其次,正如我所提到的,我试图将此代码添加到 .htaccess 文件中以实现 SSL 证书并强制https每个 URL - 但如果我使用它会导致错误www.(而之前它没有导致错误)并且我的速度测试表明存在大量重定向,这导致一切速度减慢:RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]有谁能够用base_url文件中正确的规范链接结构为我指明正确的方向Config/App.php,我是否需要更改(或废弃)第一个代码片段,以及如何强制https使用我的 SSL 证书(以及www.在我的网址中)。我更希望我的 URL 具有以下结构,https://www.example.com而不是https://example.com
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我是否正确地认为这段代码会强制删除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角度还是从技术角度?在 SEO 方面没有区别。使用www子域可以说具有一些技术优势(隔离 cookie 和临时站点等) - 尽管这主要是一个意见问题并且取决于您的环境。这真的取决于你。对于某些域名,使用www子域看起来很麻烦。


但重要的是您选择其中之一并重定向到规范 URL,以避免潜在的重复内容问题。


使用域顶点(即没有 www 子域)只是 CodeIgniters默认的。


对每个 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 的偏好。


查看完整回答
反对 回复 2023-07-30
  • 1 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信