php - 如何将任何输入重定向到 https 和 www?
问题描述
我需要example.com
被重定向到https://www.example.com
.
我的 .htaccess 文件位于根目录中,配置如下:
RewriteEngine On
DirectoryIndex html/home5.html
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
使用此配置,www.example.com
和https://example.com
都http://example.com
被正确重定向到https://www.example.com
(www.example.com/other.html
等等分别工作)。
但是example.com
被重定向到https://www.example.com/http://www.example.com/
并且显然会产生“在此服务器上找不到请求的 URL”。为什么会这样?我需要更改什么才能使其正常工作?
我也不明白为什么用我当前的配置正确添加了https://example.com
。www
解决方案
有一个运行良好的 .htacces 我正在使用相同的问题,有 2 个步骤:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
首先,如果请求的 url “关闭”了 HTTPS,则重定向到 HTTPS 并在后面添加 url 请求查询(保存在 $1 中)。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%1/$1 [L]
然后,www 的特殊情况。子域和 https on,如果在请求中匹配“www”,则重定向到 https on 的同一页面!
编辑:实际上你甚至不需要第二个条件
推荐阅读
- regex - Perl 中的正则表达式来捕获每个段落的前 n 行
- apostrophe-cms - joinByArray 字段添加到撇号-cms 中数组的开头
- python - 使用指定外键的 SQLAlchemy 向数据库添加实例
- html - 我怎样才能在页面的另一边做同样的事情
- javascript - Variables outside of an if statement in discord.js
- amazon-cognito - 选择不使用托管 UI 时正确使用 Cognito 回调 URL
- r - 根据 R 中的多个条件选择行
- javascript - 为什么 Vert.x 会同步执行代码?
- email - Google 表格 - 复选框更改为 True 时发送电子邮件
- javascript - socket.io 在网页左上角显示“崩溃”