apache - 我的 RewriteRules 中真的需要 [NC] 吗?
问题描述
在使用 Apache 作为重写代理时,我已经看到了以下两种变体,我一直想知道为什么有些人将 NC 标志放在 RewriteRule 的末尾。今天我决定停止疑惑,问你们所有人:-)
RewriteRule 中没有进行比较,所以——据我所知——没有必要把重点放在字符串的大小写上。我是对的,还是你有什么要向我学习的?
变体 #1:
RewriteCond %{HTTP_HOST} ^(?:www\.)?example-(?:foo|bar|baz)\.(?:com|de|es|fr|it|us)$ [NC]
RewriteRule ^/(.*)$ https://www.target.com/path/$1 [R=301,NC,L]
变体 #2:
RewriteCond %{HTTP_HOST} ^(?:www\.)?example-(?:foo|bar|baz)\.(?:com|de|es|fr|it|us)$ [NC]
RewriteRule ^/(.*)$ https://www.target.com/path/$1 [R=301,L]
解决方案
我确定:
RewriteRule ^/(.*)$ https://www.target.com/path/$1 [R=301,NC,L]
和
RewriteRule ^/(.*)$ https://www.target.com/path/$1 [R=301,L]
没什么区别。
信息:标志NC
表示非大小写。
但是当你使用类似的东西时:
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [R=301,NC]
很重要!
当您不使用 , 时NC
,(.*\.(jpg|gif|png))$
只会匹配:
example.jpg
example.png
example.gif
但是,当你使用它时NC
,(.*\.(jpg|gif|png))$
也会匹配:
example.JPG
example.jPG
example.Png
example.gIf
#etc....
基本上,example
无论它们是大写还是小写,它都会匹配字符。
即使在您的情况下,如果您使用的是 Linux RewriteCond
,也不需要。NC
RewriteCond %{HTTP_HOST} ^(?:www\.)?example-(?:foo|bar|baz)\.(?:com|de|es|fr|it|us)$ [NC]
在 Linux 上无法正常工作。
但是,如果您使用的是 Windows,您可能需要始终使用NC
for RewriteCond
。
但是,在一种情况下,您%{HTTP_HOST}
在 Linux 或 Windows 中进行比较时,您可能总是需要添加 NC 标志。因为域不区分大小写:
RewriteCond %{HTTP_HOST} !www\.example\.com [NC]
推荐阅读
- r - R如何决定向量的模式?
- botframework - 如何使用 SDK4.0 在机器人中添加对话框
- apache-zeppelin - 如何在不同的主机上运行 zeppelin 0.8.0 解释器?
- openshift - 如何显示卷的内容?
- appium - 使用 Java 包获取 `.uix` 文件
- python - 如何获得按折叠平均的模型的 SHAP 值?
- spring - Spring Boot + JPA - CrudRepository 更新然后阅读
- rabbitmq - Rabbit MQ 创建只读用户
- azure - 具有多个触发器的逻辑应用的问题
- jquery - 当用户选择一次时,Jquery Datepicker UI 不选择值