RewriteCond RequestURI 为什么 RegEx 不起作用?

RewriteCond RequestURI 为什么 RegEx 不起作用?

我有一个有效的 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/(.*)$

相关内容