在使用Apache作为重写代理时,我看到了下面这两个变体,我总是想知道为什么有些人会在RewriteRule的末尾添加NC标志。今天我决定不去想了,问大家:-)
在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]发布于 2021-02-02 15:47:41
我确信:
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后的字符,不管它们是否大写,都是小写。
即使是您的RewriteCond,如果您使用的是Linux,也不需要NC。
RewriteCond %{HTTP_HOST} ^(?:www\.)?example-(?:foo|bar|baz)\.(?:com|de|es|fr|it|us)$ [NC]在Linux上不能很好地工作。
但是,如果您使用的是Windows,则可能需要始终使用NC for RewriteCond。
但是,在一种情况下,在Linux中比较%{HTTP_HOST}时,可能总是需要添加NC标志。因为域不区分大小写:
RewriteCond %{HTTP_HOST} !www\.example\.com [NC]https://stackoverflow.com/questions/66011462
复制相似问题