从 url 中删除“index.html”并使用单个 301 重定向添加“www”

2023-12-12

为了去除index.html or index.htm从网址我在我的中使用以下内容.htaccess

RewriteCond %{REQUEST_URI} /index\.html?$ [NC]
RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L]

这有效!(有关此问题末尾的标志的更多信息*)

然后为了添加www在网址中我使用以下内容.htaccess

RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ "http://www.mydomain.com/$1" [R=301,NE,L]

这也有效!

这里的问题是在如下情况下,如何避免上述规则创建的双重重定向:

  1. 浏览器要求http://mydomain.com/path/index.html
  2. 服务器发送301将浏览器重定向到的标头http://mydomain.com/path/
  3. 然后浏览器请求http://mydomain.com/path/
  4. now the 服务器发送301将浏览器重定向到的标头http://www.mydomain.com/path/

这显然不是很聪明,因为一个可怜的用户在问http://mydomain.com/path/index.html会被双重重定向,他会觉得页面速度太慢。此外,Googlebot 可能会停止跟踪双重重定向的链接原因(我不确定最后一个,我不想对此进行讨论,这只是另一个可能的问题。)

Thanks!


*可能对谁感兴趣:

  • NC也用于重定向 大写文件,即INDEX.HTML / InDeX.HtM
  • NE用来 为了避免双重 url 编码,我避免http://.../index.html?hello=ba%20be被重定向到http://.../index.html?hello=ba%2520be
  • QSA用于重定向 也查询,即http://.../index.html?hello=babe to http://.../?hello=babe (不需要,因为阿努巴瓦答案)

为了避免双重重定向,.htaccess 文件中还有另一个满足这两个条件的规则,如下所示:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . http://www.%{HTTP_HOST}%1 [R=301,NE,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule . http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . %1 [R=301,NE,L]

所以如果输入 URL 是http://mydomain.com/path/index.html那么这里的第一个规则中的两个条件都得到满足,并且将有 1 个单个重定向 (301) 到http://www.mydomain.com/path/.

我也相信QSA上面并不真正需要标志,因为你是NOT操纵查询字符串。

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

从 url 中删除“index.html”并使用单个 301 重定向添加“www” 的相关文章

随机推荐

  • PackageInfo LoadLabel 性能缓慢

    我正在为 Android 编写一个应用程序 其中获取应用程序的标签 实际名称 非常慢 特别是这段代码的性能非常糟糕 packageInfo loadLabel pm 只是为了给您一些指标 在安装了 400 个应用程序的 Android 设备
  • NES(6502组装)精灵动作

    我目前正在开发 NES 6502 组装游戏 但我不明白如何使精灵移动 我认为它应该是这样工作的 loop LDA 200 will load into the A register the content of address 200 wi
  • IntelliJ:使用 docker jvm 还是 docker maven?

    我有一个 docker jvm 实例 我从命令行使用它来编译和运行 java 代码 IntelliJ 的项目配置要求我指向文件系统上的 jvm 所以 我想知道 我可以配置intellij来使用这个docker容器吗 我想我可以配置一个 do
  • Socket.io 客户端:用一个处理程序响应所有事件?

    是否可以让 socket io 客户端响应所有事件 而无需单独指定每个事件 例如 像这样的东西 显然现在不起作用 var socket io connect http myserver socket on function listen t
  • 为什么 C++ 中析构函数运行两次?

    在做编程作业时 我似乎在基本的 C 概念上遇到了困难 我在程序中发现了该错误 这是由于我的析构函数运行次数超出了我的预期造成的 这是一个代码示例 演示了我做错了什么 直到最基本的部分 include
  • 添加/提交文件到所有分支

    假设我在一个分支上并且索引是脏的 我对文件 x 进行了更改 并且还进行了一些其他更改 有没有办法将文件 x 添加到所有现有分支 像这样的东西 usr bin env bash current branch git rev parse abb
  • 复杂的 git rebase 操作

    看着git rebase手册页 我没有看到任何看起来像我想要的图表 除了有些图表似乎做了与我想要的相反的事情 并且玩弄 onto也没有得到我想要的 让我看看是否可以画出像图中那样的图表git rebase手册页 左侧的竖线是为了使 Mark
  • 如何使用 python 访问 Azure AD 组和用户详细信息?

    params urllib urlencode Specify values for the following required parameters api version 1 5 tenant id vvvvvvvvXXXXXX he
  • Java 中的调度异常

    我正在开发一个任务 需要从给定的 URL 下载文件 其中一个要求是它可以处理网络故障和异常 在我的实现中 我有一个 DonwloadManager 为每个 URL 分配一个线程 以免阻塞 问题是我不确定如何通过代码模拟失败和异常 我尝试使用
  • 如何为 Cydia 和越狱的 iPhone 开发应用程序

    我开始为 iPhone 开发应用程序 我想开发一个特定的应用程序 但苹果肯定会拒绝它 所以我想为 Cydia 开发它 因为我认为它很有用 我试图弄清楚如何使用 Theos 和 XCode 来创建我的应用程序 但我什么都不懂 如果你们中的一些
  • Rails 基于对象的权限/授权引擎?

    我想在我的应用程序中添加 共享文档 功能 就像在谷歌文档服务中一样 据我所知 用户可以 可以列出 查看 创建 编辑 删除自己的文档 与所有人共享自己的文档 它是公共文档 将自己的文档共享给具有只读访问权限的其他用户 将自己的文档共享给具有读
  • 如何从 JSON 对象中删除包装器?

    我有一个带有包装器的 JSON 对象 其中包含有关它来自的服务的信息 在解析我真正关心的对象之前 我想去掉包装器 然后只解析该对象 我如何转换这个 JSON 对象 object id object 1 description Black o
  • 有没有API可以同时获取后置和前置摄像头视图? [复制]

    这个问题在这里已经有答案了 我需要在一个显示器上显示后置摄像头和前置摄像头 是否可以同时显示两者 有没有可以同时获取两个视图的API 与单相机相同 只是双相机 两个 SurfaceHolder 和两个 Camera 实例 http deve
  • TLS 扩展“服务器名称指示”(SNI):值在服务器端不可用

    基于 JSSE 示例 我尝试在服务器端获取 TLS 参数 服务器名称指示 SNI 的值 但没有成功 我确信该值是由客户端发送的 因为我使用了显示该值的网络嗅探器 Wireshark 但是当我使用以下代码片段时 服务器名称参数列表为空 同时显
  • 在令牌后触发的 jQuery 自动完成插件

    我正在构建一个应用程序 并且希望在文本区域内进行自动完成 就像 Twitter Facebook 使用 name 所做的那样 但是 我希望在输入 TID x 时触发它 其中 x 是任意长度的整数 看来 Twitter Facebook 在您
  • Google 电子表格 CTRL+Shift+E

    我有两张纸的电子表格 current sheet and archive sheet 我还有一个脚本 我创建的 可以从中删除数据current sheet并将其附加到archive sheet每月一次 The sheets have an
  • 使用FutureBuilder时如何只获取一次数据?

    我有一个获取请求 我将其作为未来传递给 FutureBuilder FutureBuilder future gettask builder context snapshot if snapshot hasData Stopwatch st
  • 如何解决 Mvc 中没有为此对象定义无参数构造函数错误?

    我正在创建一个演示应用程序来学习如何使用存储库模式来执行插入操作 我正在使用 Nop Commerce http www nopcommerce com 存储库模式的代码 Error 没有为此对象定义无参数构造函数 我看过这个链接 MVC
  • 哪个应该首先运行 git submodule update 或 git submodule init ?

    我在这里看到 https github com UCSD PL proverbot9001 issues 73 run git submodule update and the makes sure init is only ran if
  • 从 url 中删除“index.html”并使用单个 301 重定向添加“www”

    为了去除index html or index htm从网址我在我的中使用以下内容 htaccess RewriteCond REQUEST URI index html NC RewriteRule index html 1 NC R 3