regex - RewriteCond REQUEST_URI 不匹配整个路径
问题描述
我很困惑。
我的目标是检测是否需要重定向(路径已更改)。这是一个最小的例子。
RewriteRule ^first$ second
RewriteCond %{REQUEST_URI} !^/$1$
RewriteRule ^(.*)$ /$1 [R=301,L]
我请求example.com/first
有意得到301 to second
.
问题是, RewriteCond 总是评估为 true 并创建一个循环。第一次去,还好。但是在第二个请求时,即 now example.com/second
,它再次评估为 true,即使%{REQUEST_URI}
is/second
和$1
is 也是如此second
。我知道它是..我通过重定向到附加了两个变量的 URL 进行了检查。
知道我错过了什么吗?
解决方案
请记住这里的两个重要事实:
mod_rewrite
规则循环运行,只有在没有成功执行规则时才停止%{REQUEST_URI}
重写或重定向后更改的值。
查看您的规则,您的第二个重定向规则是错误的,因为您不能使用%1
或$1
在 value 部分中,RewriteCond
因此由于否定而使其始终返回 true。
推荐阅读
- python - 在 google colab 中导入的问题
- python - 从具有多个条件的 pandas 数据帧中匹配、替换和提取子字符串的最快方法是什么?
- cross-compiling - 添加 libusb 库并包含到我的交叉编译器中
- yaml - 如何使用 YamlDotNet 反序列化 yaml 文件中的键/值对列表
- node.js - Firebase Cloud Functions Cron Async Func 多次调用
- authentication - 无法通过 axios 发送图像上传和使用令牌承载身份验证
- ruby-on-rails - 删除使用 has_and_belongs_to 关联的记录时,如何解决无效语句?
- wordpress - 让 WordPress 在两个不同的 url 模式上显示相同的页面
- javascript - 从 ReactJS 调用 Javascript 抛出窗口引用错误
- watson-conversation - 将应用程序部署到 IBM Bluemix 的域时出错