htaccess - 如果末尾有问号,则剪掉问号

2023-11-30

有这么一段代码

<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(^|&)srp=
RewriteCond %{QUERY_STRING} !(^|&)q=
RewriteRule ^(.+?)\.html$ https://%{HTTP_HOST}/$1.html? [L,R=301]
</IfModule>

<IfModule mod_rewrite.c>
RewriteRule ^(.+?)\.html(?!/amp/).+$ https://%{HTTP_HOST}/$1.html? [L,R=301]
</IfModule>

它工作得很好,但如果链接是这样的:

website.com/post.html?

在这种情况下,问号仍然存在。在这种情况下我该如何删除它?


您不能简单地检查空查询字符串,因为QUERY_STRING服务器变量已定义且为空,无论尾随是否?存在或不存在。

去除流浪者?在 URL 路径的末尾(本质上是一个空查询字符串),您可以检查THE_REQUEST服务器变量。例如:

RewriteCond %{THE_REQUEST} \s[^?]*\?\s
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSD,L,R=301]

The QSD(查询字符串丢弃)标志删除查询字符串。这是在 Apache 2.4 上删除查询字符串的首选方法,而不是附加一个? to the 代换 string.

THE_REQUEST包含 HTTP 请求标头的第一行,并包含以下形式的字符串:

GET /post.html? HTTP/1.1

所以,正则表达式\s[^?]*\?\s匹配文字?随后是一个space在 URL 路径的末尾(避免?这可能发生在非空查询字符串的末尾)。例如:

  • /post.html?重定向到/post.html
  • /post.html?foo=1?- 自决赛以来没有重定向?是的一部分foo网址参数value.

Aside:你不应该将每个块包围在<IfModule mod_rewrite.c>包装器,除非指令是可选的。 (即使如此,这些指令也应该组合在一起。)

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

htaccess - 如果末尾有问号,则剪掉问号 的相关文章

  • 未加载 Firebird 扩展

    我正在尝试在 PHP 中使用 Firebird 扩展 我有扩展文件 php pdo firebird dll php interbase dll in my ext文件夹 我将它们添加到我的php ini像这样文件 PHP PDO FIRE
  • 在读取正文之前拒绝 HTTP 请求

    我正在开发一个网站 用户需要上传一些非常大的文件 该网站是用 PHP 编写的 在某些情况下 我想根据标头拒绝文件 理想情况下 我想在收到标头后立即拒绝请求 而不读取正文 如果标头足以表明该文件应被拒绝 则没有理由读取 200M 的文件 此外
  • 使用 .htaccess 重定向到动态相对路径?

    是否可以使 htaccess 理解 动态相对路径并正确重定向到它们 我的设置如下 http domain com htroot aaa xyz http domain com htroot bbb xyz http domain com h
  • Apache mod_rewrite 将双斜杠转换为单斜杠

    我有一个像这样的网址 http example com img php url http example2 com path to image name jpg 所以我通过这个问题创建了一条规则Apache mod rewrite 复杂 U
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 在 PHP 中设置 HTTP 响应代码(在 Apache 下)

    给出以下两种在 PHP 中设置 HTTP 响应代码的方法 具体来说 在 Apache 下 方法一 http response code 404 方法二 header HTTP 1 0 404 Not Found 我的问题是 除了这个事实之外
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 使用 .htaccess 重定向到 404 错误的 php/html 文件

    例如 我想将所有 404 错误重定向到 404 php 我尝试过使用ErrorDocument 404 404 php在 htaccess 中 但如果运气不好 也许我的其他规则不允许这样做 我不太确定 因为我在 www 上找不到此信息 如果
  • .htaccess 将所有页面重定向到新域上的主页

    我将使用哪个重定向规则来重定向下的所有页面olddomain example被重定向到newdomain example 该网站的结构完全不同 所以我想要每一页在旧域名下重定向到新域名索引页 我认为这可以 在 olddomain examp
  • Apache 网络服务器启动时出现错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我刚刚切换
  • 文件不存在时.htaccess 重定向

    我正在使用 htaccess 将用户重定向到我的主控制器 并且工作正常 但是当我调用一个不存在的js文件时 如下所示 这个js文件不只是说404 文件不存在 而是获取index php的内容 我应该如何进行 这是我的 htaccess
  • Application.cpp 中的 SoftException:249:无法访问文件

    我有一个包含新闻消息的网站 而在我的 htacces文件我有这行代码 RewriteRule event 0 9 events php id 1 如果我访问 mysite com index event 1 我会得到一个500 intern
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 当我使用 session_start() 时,Xampp 7.0.1 Apache 崩溃

    当我在 PHP 中使用 session start 启动会话时 我的 Apache 服务器停止工作 我正在使用 Windows 版 Xampp 7 0 1 我的配置文件如下所示 即使我把它放在文件的第一行 它也不起作用 有人知道如何解决这个
  • 阻止搜索引擎抓取目录

    我的网站有这样的 URL 最长 结构 http www example com xyz pqr abcd efgh 123 html http www example com xyz pqr abcd efgh 123 html 因此最多有
  • 为什么我的 Apache2::Log 输出用 \n 替换换行符?

    我在 apache2 mod perl 下设置了多个虚拟主机 我用的是ErrorLog指令为每个虚拟主机获取单独的错误日志 仅当我使用 Apache2 Log 时 这才按预期工作 警告 只会记录到常规错误日志中 这样就可以了 最后 但还存在
  • DBus 是我要找的吗?

    我需要一个Linux上的IPC系统 我的要求是 面向数据包 消息 能够处理点对点和一对多通信 没有层次结构 没有服务器和客户端 如果一个端点崩溃 必须通知其他端点 现有 Linux 发行版的良好支持 Apache 存在 绑定 用于创建动态页
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索

随机推荐

  • 动态链接标签无法打开网站

    我最近开始使用动态组件 它工作得很好 直到我开始使用动态链接标签 所以这是我的问题 我想通过标签链接打开一个网站 但每次我尝试这样做时 它都会破坏程序并给出错误 System ComponentModel Win32Exception pr
  • JavaBean“useBean类属性classes.UserData的值无效”[重复]

    这个问题在这里已经有答案了 我有两个 JSP 和一个 JavaBean 无法正常工作 我使用的是Tomcat 6 0 第一个 JSP 是 GetName jsp 位于 C Tomcat webapps app1 GetName jsp
  • 从 python 启动 nano 作为子进程,捕获输入

    我试图从Python内部启动一个文本编辑器 nano 让用户输入文本 然后在写出后捕获文本 Control O 我没有与subprocess之前没有模块 也没有管道 所以我不知道下一步要尝试什么 到目前为止我有这个代码 a subproce
  • PDFBOX 具有粗体和普通文本的同一流

    好吧 我一直在使用 PDFBox 但我仍然完全不理解它 但我已经阅读了文档 使用字体和其他一些地方 但我找到了如何从 PDF 中获取文本 它是风格 但我正在创造它 而不是阅读它 我正在尝试做点什么 Like 这 在同一行上有粗体和普通文本
  • 检查 C 中文件是否存在的最佳方法是什么?

    有没有比简单地尝试打开文件更好的方法 int exists const char fname FILE file if file fopen fname r fclose file return 1 return 0 查找access 函数
  • 映射多对多关系

    我在让实体框架处理数据模式中的多对多关系时遇到一些问题 这是我的模型 public class User public int UserId get set public int Username get set public IEnume
  • 我如何找到哪个域从我的服务器请求 iframe 并将域保存在数据库上

    我有一组不同的网站请求iframe由于各种原因从我的服务器上删除了 html 文件 是否可以追踪onload哪个域请求iframe然后将其保存到数据库中 如果该域已存在 则不要将其添加到数据库中 请求 iframe 内容的不是域 而是用户的
  • sqlite 日期排序

    我正在将文件解析到 sqlite 数据库中 其中包含 YYYY MM DD 格式的日期 我想将条目存储到 sqlite 中 以便我可以按日期对条目进行排序 字符串不切割它 在 sqlite 中存储和排序日期的正常协议是什么 应该将日期转换为
  • 舍入错误?

    在我的课程中 我被告知 连续值在内存中近似表示 因此使用浮点数进行计算会涉及舍入误差 这些是位模式中的微小差异 因此测试e f是不安全的 如果e and f是花车 参考Java 这是真的 我使用了比较语句doubles and floats
  • 我可以在 Pool.imap 调用的函数中使用多处理队列吗?

    我正在使用 python 2 7 并尝试在自己的进程中运行一些 CPU 繁重的任务 我希望能够将消息发送回父进程 以使其了解进程的当前状态 多处理队列似乎对此很完美 但我不知道如何让它工作 所以 这是我的基本工作示例 不使用队列 impor
  • 为什么有界类型参数会出现“java.lang.ClassCastException:[Ljava.lang.Object;无法转换为”错误,而形式类型参数则不会?

    由于 java 没有通用数组 因此我使用将对象数组转换为类型参数的常规技巧 当我有一个像这样的正式类型参数时 这工作得很好
  • cumsum() 从最后一个条目开始向后移动

    我想计算从最后一个值开始向后移动的数字向量的累积和 标准cumsum R 中的函数通常从第一个值开始并向前移动 如简单的示例所示 cumsum 1 5 1 3 6 10 15 但我想要一个像这样的结果 15 14 12 9 5 有没有R函数
  • mysql 中每组的行数

    我想根据这种情况生成查询结果 可以根据crew id和类型创建行号 id crew id amount type 1 4 1000 AUB 2 4 1500 AUB 3 5 8000 CA 4 4 1000 CA 5 5 1000 AUB
  • 空传播替换空检查先验条件语句

    看到一个类似的问题 我想知道以下表达式是否 if attribute null attribute Description input 与以下零传播变体的行为 几乎 相同 if attribute Description input 到目前
  • 使用命名空间和共享内存字典时关闭管理器错误“AttributeError:'ForkAwareLocal'对象没有属性'连接'”

    我在尝试着 在进程之间共享数据帧 根据对该数据帧执行的计算 但不更改 更新共享字典 我正在使用一个multiprocessing Manager 创建一个dict在共享内存中 用于存储结果 和Namespace存储 共享我想要读取的数据框
  • 在 C# 中按键模拟按钮单击

    好的 我正在制作一个 Tic Tac Toe 游戏来帮助我学习 C 我正在尝试为其添加一些功能 因此我希望人们能够在计算机上使用数字键盘来模拟单击按钮 这是我所拥有的 但当我使用数字键盘时 按钮不会单击 你们中有人能看出原因吗 start
  • 可变参数模板复杂继承生成

    尝试了一下可变参数模板 看看可以用它们做什么 我发现自己想知道一些事情 假设我有一个类 它可以将其他几个类作为模板参数 每个类都有一个嵌套类 我们称之为nested class template
  • Nil 与预期的参数类型选择器不兼容

    在从 Swift 2 3 转换为 Swift 3 时 我收到以下代码行的错误 var contactButton UIBarButtonItem return self CustomRightItem icon nav nls contac
  • 如何避免插入重复记录

    我正在使用 Laravel 5 6 29 if HarmFlag where post id postId gt where harm id harm id gt get gt isEmpty HarmFlag create post id
  • htaccess - 如果末尾有问号,则剪掉问号

    有这么一段代码