2017-03-08 36 views
0

我正在尝试使用.htaccess规则来防止某些静态文件通过我的PHP前端控制器,但它似乎不起作用。规则如下:为什么这个RewriteCond跳过静态文件类型不工作?

<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的错误日志说明问题。也许我的头脑在工作中很漫长,但我一直无法找到我的重写条件中的缺陷。感谢您的帮助。

回答

0

通过艰苦的试验和错误,我发现了这个问题,并且我还没有完全理解这个机制。这个脚本是一个以前工作正常的Wordpress网站的包装。显然是/wp-content/uploads目录丢失和worldexecute位。一旦我调整到755,这个.htaccess规则再次开始工作。

我不太明白如何或为什么会干扰htaccess规则,但我很乐意回来服务。

0

第一个条件有错误 - 它会跳过所有开始带点的文件,跟随任何内容并结尾写入扩展名。只需输入^ *,如下所示:

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

感谢你的想法,但我很伤心地报告你的修改条件没有改变。 –

+0

我衷心感谢这一努力,但它仍然没有任何区别。 –

+0

好吧,更新后的答案实际上已经过测试(除了向静态文件列表添加“txt”扩展名)并且它按预期工作。这是你的.htaccess文件的全部内容吗? –