使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW)

2023-12-12

我必须将我的网站从https://www.example.com/ to https://website.com/.

SSL已正确安装在我的服务器上。

我在用Apache并且必须使用来做到这一点Apache(任何一个httpd.conf/ssl.conf or .htaccess)

我几乎使用了所有我能搜索到的方法,但没有一个对我有用。

  • http://www.example.com/正确重定向到https://example.com/

  • http://example.com/正确重定向到https://example.com/.

But

  • https://www.example.com/ 不重定向正确地https://example.com/.

它给我“无效的证书错误”,当我在浏览器中添加异常(接受证书)时,它会重定向到https://example.com/。但我不想添加这个例外(在浏览器中添加证书)。

请注意,我的 SSL 证书是为example.com并不是www.example.com.

以下是我的.htaccess规则和条件

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]

我也使用过以下内容,但这些也不起作用:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

也用过这个,但没有运气

RewriteEngine On
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

这也没有运气

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

我尝试了 5-6 个其他解决方案(与上面类似),但没有一个有效。所有这些都适用于我上面提到的前两种模式,但没有一个适用于https://www.

请注意,这些条件.htaccess达到了,我的意思是.htaccess并没有被忽视。我已经使用重定向验证了这一点,并且上面提到的两种模式也有效。

In httpd.conf/ssl.conf the AllowOverride指令设置为All.

我可以访问httpd.conf/ssl.conf.

PHP版本 5.5.29

Apache2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.5.29

主机名:端口example.com:443

最后但并非最不重要的一点是我的网站https://example.com/无法在 Internet Explorer 和 Safari 中打开并给出证书问题(错误),但是当我使用 SSL 检查器(多个)检查我的域时,所有 SSL 检查器都会提到 SSL 已正确安装。

检查这张图片,这会更好地解释事情:

Browsers reporting SSL cert error

完全的.htaccess如下:


Options +FollowSymlinks 
DirectoryIndex index.html Home.php index.php

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://{REQUEST_URI} [L,R=301]

RewriteRule ^(blogs)($|/) - [L]
RewriteRule ^(.*)/$ index.php?mod=resturants&name=$1&%{QUERY_STRING} [L]
RewriteRule ^$ Home.php [L]
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>

请注意,我的 SSL 证书是为 website.com 颁发的,而不是 www.website.com。

这是你的主要问题。你是never将能够重定向自www to non www没有valid证书www。原因是在 Web 服务器处理任何其他内容(包括任何重写规则)之前,首先会处理连接。因此,当您的浏览器使用 https 协议连接到您的网站时,它必须检查有效证书,因为这就是 SSL 的本质,以确保连接安全。一旦完成,Apache 将处理您已有的 Web 服务器规则,例如重写。因此,在连接正确完成之前,它无法从 www 重写为非 www。为了实现这一点,您还需要一个证书www以及。重写规则不是问题。

这个话题经常出现,而且没有办法回避。这就是 SSL/加密的本质及其工作原理。

购买证书时,尽量不要只购买域名,因为someCA 只会给您没有 www 的信息。但如果你使用www.example.com在您的企业社会责任中,您将同时获得www.example.com and example.com99% 的时间都在同一个证书中。那么你就不用担心这个问题了。它们非常便宜,所以再买一个应该不成问题。 SSls.com 的价格为 4.99/年。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW) 的相关文章

随机推荐

  • MvvmCross 无法在 iPhone 上为 EditingDidBegin 创建目标绑定

    我有一个绑定到 EditingDidBegin 的应用程序 它在 iPhone 模拟器 iOS 7 上运行良好 但在实际 iPhone 上运行时 我收到以下警告消息 MvxBind 警告 1 29 无法为 EditingDidBegin 创
  • 如何将一个 Jupyter 笔记本导入到另一个笔记本中

    显然有可能import将一个 Jupyter 笔记本插入另一个 链接页面有相当多的代码来完成此操作 我应该将该代码添加到导入笔记本中吗 页面对此并不清楚 它应该是一个通用的解决方案 因此将所有代码添加到导入其他笔记本的所有笔记本中是没有意义
  • 为什么我的列表项项目符号与浮动元素重叠

    我有一个 XHTML Strict 页面 我在其中将图像浮动在常规文本段落旁边 一切都很顺利 除非使用列表而不是段落 列表的项目符号与浮动图像重叠 更改列表或列表项的边距没有帮助 边距是从页面左侧开始计算的 但浮动会将列表项推到右侧insi
  • 微软认知服务情感 API。错误:“图像尺寸太小或太大。”

    我注意到认知服务套件中的情感 API 存在一个相当奇怪的错误 只要我发送 URL 一切都会正常工作 发送图像附件时 我收到此 JSON 错误 error code InvalidImageSize message Image size is
  • Sql 查询查找一系列相隔 5 分钟内发生的日期?

    这是 Sql Server 2008 我有一组数据 如下所示 Table UserAchievement id userId achievementId completedDate 当用户获得奖励时 奖励和用户以及日期都会被记录下来 我想要
  • Visual Studio 编译源文件的顺序是什么?

    我在 Visual Studio 2012 中有一个 C 库项目 包含这些文件 A h A cpp defines function Do A B h B cpp defines function Do B C h C cpp define
  • 如何在 CMake 文件中添加链接器或编译标志?

    我正在使用arm linux androideabi g 编译器 当我尝试编译一个简单的 Hello World 时程序编译得很好 当我通过在该代码中添加一个简单的异常处理来测试它时 它也可以工作 添加后 fexceptions 我猜它默认
  • 如何在 onSnapshot 之外从 firestore DB 获取数据

    当我尝试从 firestore 获取值并将其放入变量时 结果未定义 但在控制台中有效 My code this db collection Users doc uid get then docSnapshot gt if docSnapsh
  • bootstrap:从 show.bs.modal 事件中抑制模态

    是否可以告诉 bootstrapNOT显示模式 通过返回false从内部到框架show bs modal event EDIT 使用 stopPropagation 或简单地disable按钮不是我想要的 我想处理逻辑inside show
  • 在插入查询中动态选择列名

    收到错误列名 ColumnNames 无效 在最后一行 插入子句 知道为什么吗 Declare ColumnNames varchar 2000 Declare OrderId int set OrderId 110077 select C
  • Android studio logcat 窗口日志级别过滤器丢失

    我的打印屏幕 我不知道如何解决它 即使我尝试过解决这些问题 类似问题1 类似问题2我的android studio版本是2021 3 1 这就是New Logcat 更新 海豚 如果你想放置级别过滤器那么你只需要写level error l
  • 以编程方式设置 Android IP、DNS、GATEWAY 设置

    如何从 android java 设置 wifi ip 地址 dns 地址 网关 即以编程方式设置 我没有找到任何能够存储这些值的方法 您可以通过编程方式更改系统设置 首先 您需要在 AndroidManifest xml 中请求 WRIT
  • 捕获 iframe 的屏幕截图 - html2canvas 不起作用

    我有以下 iframe 我只是想捕获 iframe 内容的屏幕截图 我已经尝试过 html2canvas 但它似乎不起作用 我尝试过将 iframe 放入 div 中 但没有任何乐趣 我见过使用 php 实现此目的的各种方法 但似乎没有什么
  • 用多字符字符串替换字符

    我正在尝试替换德语和荷兰语变音符号 例如 or 它们应该写成ae代替 所以我不能简单地将一个字符翻译成另一个字符 有没有更优雅的方法来做到这一点 实际上它看起来像这样 尚未完成 SELECT addr REPLACE REPLACE add
  • Android:如何获取文件的创建日期?

    这是我的代码 File TempFiles new File Tempfilepath if TempFiles exists String child TempFiles list for int i 0 i lt child lengt
  • git分支可以用数字列出吗?

    我想知道是否有人构建了一个脚本或有办法列出带有数字的 git 分支 以便代替这个 最好在 bash 中 feature myusername ID 1111 my branch name feature myusername ID 2222
  • django:控制json序列化

    有没有办法在django中控制json序列化 下面的简单代码将返回 json 中的序列化对象 co Collection objects all c serializers serialize json co json 将类似于以下内容 p
  • Git 中的子模块、子树或其他依赖项?

    我有一个较大的项目 其中有很多模块 库及其各自的存储库 这些模块中的大多数是其他模块的依赖项 而不是项目的依赖项 现在已经到了主项目有多个子项目并且许多模块被共享的地步 有些依赖关系的深度超过 3 4 层 我读过可以在项目内部更新 拉取子模
  • 调用 async fns 时创建值流?

    我不知道如何提供Stream我在哪里await异步函数来获取流值所需的数据 我尝试过实施Stream直接使用特质 但我遇到了问题 因为我想使用异步的东西 比如awaiting 编译器不希望我调用异步函数 我认为我缺少一些关于目标的背景知识S
  • 使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW)

    我必须将我的网站从https www example com to https website com SSL已正确安装在我的服务器上 我在用Apache并且必须使用来做到这一点Apache 任何一个httpd conf ssl conf