REQUEST_URI 与显式路径和文件名不匹配

2024-03-13

真的很困惑,因为形式和语法看起来都很好。

REQUEST_URI 的 RewriteCond 与显式路径和文件名不匹配。隔离时,REQUEST_FILENAME 的 RewriteCond 匹配得很好。我已经使用 phpinfo() 验证了 REQUEST_URI 包含前导斜杠,并且也进行了不带前导斜杠的测试。

这里的目标是知道请求是针对此文件的,如果它不存在,则抛出 410。

RewriteCond %{REQUEST_URI} ^/dir1/dir2/dir3/v_9991_0726dd5b5e8dd67a214c0c243436d131_all\.css$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]

我不想省略第一个 Cond,因为我只想对与此类似的少数文件执行此操作。

UPDATE I

试图获得明确的测试。测试设置:

  • testmee.txt 不存在
  • 请求是针对根目录中的 testmee.txt
  • 通过重定向到 google 验证 request_uri 是否匹配
  • 仅使用第一个 Cond 时无法得到 410
  • (仅使用第一个 Cond 时,服务器提供 404,而不是 410)
  • (使用两个条件,服务器提供 404,而不是 410)
  • 仅使用第二个 Cond 时可以获得 410
RewriteCond %{REQUEST_URI} ^/testmee\.txt$
#RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]

versus

#RewriteCond %{REQUEST_URI} ^/testmee\.txt$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]

更新二

怀特先生的回复:

呃,同样的症状。可能不得不忍受 googlebot 命中 404,而不是过时的 css/js 所需的 410。从长远来看,可能没什么大不了的。

感谢您的 request_uri 测试重定向。在这些测试中一切都正常工作。页面名称等按预期返回,在 var= 重写 URL 中。

此时,我认为一定是对与文件类型扩展名相关的 404 进行了一些内部处理。请参阅下面的线索。我有 Prestashop 购物车软件,它一定会在文件类型上强制执行 404。

这将重定向到谷歌(以确认模式匹配):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.txt$ http://www.google.com/ [L]
(L flag is needed or else other Rules further down will interfere.)

这将继续返回 404 而不是 410:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.txt$ - [NC,R=410]

作为控制测试,这将返回 410:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ - [NC,R=410]

如果在上述失败的测试中文件类型为 css,则我的自定义 404 控制器不会被调用。我只得到一个简单的 404 响应,没有包含我所有网站模板的自定义 404。

例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.css$ - [NC,R=410]

恐怕我已经浪费了你的一些时间。我很抱歉。我从来没有想过Prestashop的代码会根据文件类型强制404,但我看不到任何其他解释。我可以深入研究它,也许可以在控制器中找到正在执行此操作的位置。不过还是得休息一下


这并不是一个真正可靠的答案,更多的是尝试帮助调试这个问题并消除一些神话......

我已经验证使用phpinfo() that REQUEST_URI包含前导斜杠

是的REQUEST_URIApache 服务器变量确实包含前导斜杠。它包含完整的 URL 路径。

但是,那REQUEST_URIApache 服务器变量不一定与$_SERVER['REQUEST_URI']PHP 超级全局 - 事实上,它们根本不是同一件事。这些变量之间存在一些显着差异(在某些方面,它们共享相同的名称可能有点不幸)。值得注意的是,PHP 超全局包含来自请求的初始 URL 并包含查询字符串(如果有)并且未进行 % 解码。而同名的 Apache 服务器变量包含重写的网址(不一定是请求的 URL)并且不包含查询字符串并且经过 % 解码。

所以,这就是为什么我问你是否还有其他 mod_rewrite 指令。你们很可能发生了冲突。如果另一个指令重写了 URL,那么条件将永远不会匹配(尽管 PHP 超全局建议它应该匹配)。

似乎如果我把它放在顶部,最后一个标志将结束该行程的处理,返回 410

该指令当然应该放在顶部.htaccess文件,以避免 URL 被提前重写。这L当与 a 一起使用时, flag 实际上是多余的R=410(除3xx) - 在这种情况下是隐含的。

然后我将结果更改为“抛出 410”,它抛出 404。

这肯定是由服务器端覆盖引起的。但在其他情况下你也可以抛出 410,所以这似乎排除了这种可能性。但是,您可以在以下位置重置错误文档:.htaccess如果有疑问(除非您已经在使用自定义错误文档):

ErrorDocument 410 default
RewriteCond %{REQUEST_URI} ^/dir1/dir2/dir3/v_9991_0726dd5b5e8dd67a214c0c243436d131_all\.css$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]

虽然这并没有真正影响规则的行为方式,但您不需要第一个RewriteCond检查指令REQUEST_URI。您应该在RewriteRule pattern相反(这会更有效,因为这是首先处理的)。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^dir1/dir2/dir3/v_9991_0726dd5b5e8dd67a214c0c243436d131_all\.css$ - [NC,R=410]

The NC标志应该是多余的。

尽管如此,与现有指令的冲突是最可能的原因。删除所有其他指令。您还看到同样的行为吗?


您可以测试该值REQUEST_URI服务器变量。您可以发出重定向并传递REQUEST_URI作为 URL 参数,或设置环境变量(但您需要注意REDIRECT_<var>每次重写)。

例如,在您的顶部.htaccess(或者无论你在哪里尝试这个):

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^ /test.php?var=%{REQUEST_URI} [NE,R,L]

创建了一个虚拟人test.php文件以避免对错误文档的内部子请求。

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

REQUEST_URI 与显式路径和文件名不匹配 的相关文章

  • URL 重写查询数据库?

    我试图了解 URL 重写的工作原理 我有以下链接 mysite com profile php id 23 我想用用户的名字和姓氏重写上面的网址 mysite com directory liam gallagher 然而 根据我读到的内容
  • 将子域重定向到新域

    大家好 尝试让 301 重定向正常工作但遇到了麻烦 我需要将 sub domain1 com 重定向到 www domain2 com 并确保所有文件名或参数都随之发送 这就是我正在尝试的 RewriteCond HTTP HOST dom
  • 如何配置 IIS 以在 HTML5 模式下 URL 重写 AngularJS 应用程序?

    我有AngularJS 种子项目 https github com angular angular seed我已经添加了 locationProvider html5Mode true hashPrefix 到 app js 文件 我想配置
  • .htaccess php_value include_path 不起作用

    我在当地有一个小项目 我在 Windows 下使用 XAMPP 工作 我的文件目录结构是 根目录 C xampp htdocs routes Under this folder I have my bootstrap php with th
  • 如何在php中重写url?

    我有一些关于在 php 中重写 url 的问题要问 1 www test com index php name 123 至 www test com 123 2 www test com folder1 index php name 123
  • 如何防止文件被直接 URL 访问?

    我正在使用 Apache 并且我的目录中有一个示例 Web 文件夹本地主机 喜欢 http localhost test 文件位于test文件夹 index html sample jpg htaccess 样本来源index html i
  • 仅使用 .htaccess 在某些页面上将 http 重写为 https

    我知道关于我的问题有很多话题 我检查了所有这些并尝试了它们 但无法使其工作 我只需要在某些页面上将 http 重写为 https 访问 https 页面后 URL 将返回到 http 这是我到目前为止所拥有的 Rewrite Rules f
  • 多个域到单个网站

    我有多个域指向同一个网站 FFFF com FFFF ca FFFF org 等 重写 FFFF com 所有传入流量的最佳方法是什么 URL 重写还是 301 寻找最佳实践 这两个将在 htaccess 中处理 对吧 Thanks 在这种
  • 重写 .php 扩展名

    请问我该如何重写 有人可以重写这个网址吗 to http localhost display news cat 14 2 http localhost display news cat 14 2 谢谢 您可以使用 htaccess 文件来做
  • 表单方法=“获取”漂亮的URL

    所以我使用这个 HTML 表单作为一个简单的搜索字段
  • URL 重写 .htaccess

    我正准备开发一个具有以下 url 结构的网站 我是 url 重写的新手 想知道处理此问题的最佳方法 http domain com index php http domain com about about php http domain
  • Request.Url.Query 和 Request.QueryString 有什么区别?

    我一直在追踪 URL 重写应用程序上的错误 该错误表现为查询字符串中某些变音符号的编码问题 基本上 问题是基本上 search aspx search he m nek 的请求被 search he c5 99m c3 a1nek 的查询字
  • 正则表达式匹配非整数?

    尝试创建一个忽略正确整数的正则表达式 1 5 999等 和正斜杠 但在其他所有内容中都找到匹配项 例如 它将找到以下匹配项 test test1 test 1 但忽略了 1 55 7 这是为了模组重写 0 9 我想应该可以解决这个问题 它将
  • .htaccess 中的“hash”url 重写

    我想重写http example com articles html first article with http example com articles first article 可以重写吗 我尝试使用以下但对我不起作用 Rewri
  • 仅当未找到文件时才重定向请求?

    我希望有一种方法可以使用 mod rewrite 和 Apache 来做到这一点 但也许还有另一种方法可以考虑 在我的网站上 我为客户的网站重新设计版本设置了目录 如果网络根目录是 home blah www 客户端目录将是 home bl
  • 强制某些页面通过 HTTPS,而其他页面则通过 HTTP...这可能吗?

    我真的被这个困住了 基本上 我尝试使用 IIS 的 URLRewrite 附加组件始终通过 SSL 制作 2 个页面 但我还需要强制所有其他页面使用 HTTP 叹气 不要问 但如果我强制其他页面通过 HTTP 那么当您查看 SSL 页面时
  • HTTP 到 HTTPS 301 重定向代码不起作用,显示重定向过多

    我正在为我的网站之一使用 Bluehost 最近 最近 我已将我的网站从 HTTP 迁移到 HTTPS 之后 我使用了不同的代码 包括以下代码 在我的网站上强制使用 HTTPS SSL Rewrite RewriteEngine On Re
  • 将 .php URL 重定向到不带扩展名的 URL [重复]

    这个问题在这里已经有答案了 可能的重复 使用 htaccess 删除 php 扩展名 https stackoverflow com questions 4026021 remove php extension with htaccess
  • htaccess隐藏php扩展时出错,只隐藏html

    我在使用 htaccess 隐藏网站上的 php 扩展时遇到问题 我看到很多网站试图修复它 但没有任何结果 但只有 html 扩展名对我来说是隐藏的 在我的 htaccess 上 我用这个来隐藏扩展 它就在错误页面之后 这是我的 htacc
  • 如何使用 htaccess 重定向 html 扩展?

    目前 这两个链接显示同一页面 http www example com podcast episode html http www example com podcast episode html http www example com

随机推荐

  • SyncAdapter periodsync() 未触发

    我正在尝试弄清楚syncAdapter是如何工作的 我使用sampleSync Adapter作为示例 起点 并基于它进行了我的第一次测试 唯一的区别是我不使用默认的联系人提供程序 但我需要自己的联系人提供程序之一 此方法与 SampleS
  • 部分重写子类中的虚拟自动属性

    是时候回答我刚刚遇到的理论问题了 以下代码有效并可编译 public class Parent public virtual object TestProperty get set public class Child Parent pri
  • 访问服务时在 Docker Swarm 1.12 中记录客户端的“真实”IP 地址

    我有 nginx 容器作为服务在用户创建的覆盖网络内的 Docker Swarm 中运行 两者都是用以下内容创建的 docker network create driver overlay proxy docker service crea
  • 是什么导致 BigDecimal.divide 出现“非终止十进制扩展”异常? [复制]

    这个问题在这里已经有答案了 我以前使用过 BigDecimals 但不经常使用 今天早上我正在做一些事情 但我不断收到以下异常 Exception in thread main java lang ArithmeticException N
  • 使用 helix 工具包创建可点击的对象

    我在 Helix Toolkit 上找到了一个例子 它被称为 ScatterPlot 它非常接近我真正需要的 但我找不到任何关于如何将 onclick 事件侦听器添加到创建的对象 在本例中为球体 的信息 这会将球体添加到 游乐场 scatt
  • jdk 1.5 中不存在 javax.swing.grouplayout

    我用netbeans开发了一个java应用程序 它使用jdk 1 6 效果很好 但现在的要求是我需要从另一台没有 netbeans 且使用 jdk 1 5 的计算机中的 java 文件构建应用程序的 jar 我无法将该机器升级到jdk 1
  • 使用宏合并 CSV 文件

    知道如何合并一个文件夹中的 csv 文件吗 我有许多具有相同结构 列数和标题 的 csv 文件 我需要将它们的内容合并到一张纸中 我知道这并不难 但是 当我从一个表添加内容时 我需要添加带有复制此数据的表名称的新列 有什么帮助吗 谢谢你 有
  • 通过构造函数传递和存储 const 引用?

    这可能是一个简单的问题 但我一直坚持下去 我试图通过它的构造函数将一个对象从 ObjectA 传递到 ObjectB 它是 ObjectA 的成员 但是 我不想传递值 而是只想传递 const 引用并无限期地存储该引用 问题是我不知道该怎么
  • 正则表达式导致“分隔符不能是字母数字或反斜杠”[重复]

    这个问题在这里已经有答案了 我有这个代码 function a menu item remove link pattern class
  • 初始化张量

    tf coo tf SparseTensor indices np array 0 0 0 1 1 2 3 9 1 4 9 9 9 9 9 9 T values 1 2 3 5 1 1 1 1 shape 10 10 我收到错误消息 Inv
  • vuejs 条件包装器

    在我的 nativescript vue 应用程序中 我有一个名为 profileForm 的单个文件组件 我想以两种方式使用该组件 如果用户登录 我希望将该组件作为布局组件的插槽来编辑配置文件 否则我想要的是作为注册表 我不想创建额外的组
  • 更新多对多关联原则2

    有什么解决方案可以自动执行此操作吗 我的两个实体 class User ManyToMany targetEntity Product inversedBy users JoinTable name user product joinCol
  • 根据条件获取Python Pandas中数据帧的第一行,而不迭代整个数据帧[重复]

    这个问题在这里已经有答案了 假设我想获取数据帧的第一行 其中某一列具有负值 import pandas as pd df pd DataFrame columns c data 2 4 2 3 1 0 index df loc df c l
  • Google 未显示 React-Helmet 标题和描述

    我使用react helmet 为我的React 应用程序的每个页面提供唯一的标题和描述 当我使用开发工具检查页面时 标题在浏览器选项卡中正确呈现 标题和描述也正确呈现 然而 谷歌并没有在搜索结果中显示标题或描述 我究竟做错了什么 我研究过
  • 根据 selectInput 更改绘图图表 y 变量

    我正在创建一个简单的折线图 可以在 Shiny 中正确呈现 我现在添加了一个 selectInput 其中包含 2 个不同度量的名称 按照它们在我的数据集中出现的方式编写 我希望我的 y 变量能够相应地改变 p lt plot ly dat
  • 在一个查询中插入两个表

    如何同时将值插入到两个表中 如果不成功 两个表都应该回滚 我正在使用 SQL Server 查询过程会抛出 C 代码 您可以将这两个查询作为一个语句运行 insert into table1 values insert into table
  • 在Android项目中使用开源库

    我是 Android 编程的初学者 我正在使用 android studio 现在我想知道从 gitHub 安装开源库的最佳方法是什么 我的问题是从组织原则的角度来看 我应该为每个库创建一个新包并将所有库源代码按原样放入该包中吗 该包应该位
  • 导入类型时 Sveltekit Typescript 解析错误

    我在一个全新的 Sveltekit 项目中有这个非常简单的组件
  • Spring data mongodb 使用 MongoTemplate 从文档中删除属性

    我有一个如下所示的文档 id ObjectId 5864ddd8e38112fd70b89893 class com apic models UserReg name xxx email email protected cdn cgi l
  • REQUEST_URI 与显式路径和文件名不匹配

    真的很困惑 因为形式和语法看起来都很好 REQUEST URI 的 RewriteCond 与显式路径和文件名不匹配 隔离时 REQUEST FILENAME 的 RewriteCond 匹配得很好 我已经使用 phpinfo 验证了 RE