为什么这个RewriteCond跳过静态文件类型不起作用?

时间:2017-03-08 00:22:58

标签: php apache .htaccess

我尝试使用.htaccess规则来阻止某些静态文件通过我的PHP前端控制器,但它似乎无法正常工作。规则如下:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

# Don't try to pipe static files through php
RewriteCond %{REQUEST_URI} !^(.*)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico)$ [NC]
RewriteCond %{REQUEST_URI} !/wrapper/index\.php
RewriteRule ^(.*)$ /wrapper/index.php [L]

</IfModule>

尽管有条件跳过包含特定扩展名的文件,但如果我点击https://example.com/test.jpg,则每次都会通过/wrapper/index.php传送请求。

我尝试过这种变化只是为了测试,它也没有工作:

RewriteCond %{REQUEST_URI} (.+)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico) [NC]
RewriteRule ^(.*)$ $1 [L]

RewriteCond %{REQUEST_URI} !/wrapper/index\.php
RewriteRule ^(.*)$ /wrapper/index.php [L]

在Apache错误日志中没有任何说明。也许我的思绪在漫长的一天工作中只是疲惫不堪,但我还没有能够识别出我的重写条件中的缺陷。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

第一个条件有错误 - 它将跳过所有开始带有点的文件,跟随任何内容并以您编写的扩展名结尾。只是丢失^ *,就像这样:

RewriteCond %{REQUEST_URI} !(.+)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico)$ [NC]

答案 1 :(得分:0)

通过艰苦的试验和错误,我确定了问题,我还不太了解这个机制。这个脚本是以前一直运行良好的Wordpress站点的包装器。很显然,某些内容导致/wp-content/uploads目录丢失了executegroup的{​​{1}}位。一旦我修改为755,这个.htaccess规则再次开始工作。

我不太明白如何或为何干扰了htaccess规则,但我很高兴重新投入使用。