我有一个有效的 RewriteCond,例如:
请求URL: http://www.myserver.com/images/gallery/summer/2013/2013-07-07/thumbs/001.jpg
RewriteCond %{REQUEST_URI} !images/gallery/summer/2013/*
RewriteRule ^images/gallery/summer/(.*)$ http://xyz.s3.amazonaws.com/$1 [P]
这工作正常并且图像是从 Amazon S3 中提取的。
但是为什么 RegEx 在 RewriteCond 中不起作用呢:
RewriteCond %{REQUEST_URI} !^images/gallery/summer/2013/(.*)$
我只是想了解为什么上面的代码有效而其他的无效?
谢谢
答案1
REQUEST_URI 以 / 开头,因此,不要使用下面这个:
RewriteCond %{REQUEST_URI} !^images/gallery/summer/2013/(.*)$
尝试这个:
RewriteCond %{REQUEST_URI} !^/images/gallery/summer/2013/(.*)$
答案2
Mike 的回答是正确的。考虑打开 RewriteLog 来观察 mod_rewrite 实际在做什么。这将让您更好地了解您的规则实际上应该是什么样的。
此外,除非您实际上打算在以后的 RewriteRule 中使用 %1 的值,否则在 RewriteCond 末尾放置 (.*)$ 是不必要的且效率低下的。
答案3
您应该从命令中删除 ^ 。 尝试这个:
RewriteCond %{REQUEST_URI} !images/gallery/summer/2013/(.*)$