我的 RewriteRules 中真的需要 [NC] 吗?
Do I really need a [NC] in my RewriteRules?
在使用 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/ [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/ [R=301,L]
我确定:
RewriteRule ^/(.*)$ https://www.target.com/path/ [R=301,NC,L]
和
RewriteRule ^/(.*)$ https://www.target.com/path/ [R=301,L]
没有区别。
信息: NC
标志表示不区分大小写。
但是当你使用类似的东西时:
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com [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
来代替 RewriteCond
。
但是,在一种情况下,当您在 Linux 或 Windows 中比较 %{HTTP_HOST}
时,您可能总是需要添加 NC 标志。因为域不区分大小写:
RewriteCond %{HTTP_HOST} !www\.example\.com [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/ [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/ [R=301,L]
我确定:
RewriteRule ^/(.*)$ https://www.target.com/path/ [R=301,NC,L]
和
RewriteRule ^/(.*)$ https://www.target.com/path/ [R=301,L]
没有区别。
信息: NC
标志表示不区分大小写。
但是当你使用类似的东西时:
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com [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
来代替 RewriteCond
。
但是,在一种情况下,当您在 Linux 或 Windows 中比较 %{HTTP_HOST}
时,您可能总是需要添加 NC 标志。因为域不区分大小写:
RewriteCond %{HTTP_HOST} !www\.example\.com [NC]