Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess没有像应该的那样忽略图像吗?_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess htaccess没有像应该的那样忽略图像吗?

.htaccess htaccess没有像应该的那样忽略图像吗?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个htaccess文件,它应该将任何不存在的文件/文件夹/etc重定向到应用程序的index.php脚本中,在那里它们由应用程序的SEO重写处理 问题是,任何丢失的图像也会重定向到应用程序中,这会导致大量额外的负载,这是不必要的。我一直试图让这个htaccess文件忽略图像,但即使这个应该可以工作,它也不行,我完全不知道为什么 Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_URI} !.*\.(gif|png|

我有一个htaccess文件,它应该将任何不存在的文件/文件夹/etc重定向到应用程序的index.php脚本中,在那里它们由应用程序的SEO重写处理

问题是,任何丢失的图像也会重定向到应用程序中,这会导致大量额外的负载,这是不必要的。我一直试图让这个htaccess文件忽略图像,但即使这个应该可以工作,它也不行,我完全不知道为什么

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !.*\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?sef_rewrite=1 [L]
当我请求此文件时,会重定向到index.php

当我向它发出请求时,也会重定向到索引脚本

我不确定我在这里遗漏了什么,因为除非指定了或,否则重写规则不应该仅在请求通过所有重写条件语句时应用吗?它显然不应该通过

更新:

我将代码修改为以下内容只是为了消除可能出现的问题,但它仍然将所有不存在的图像重定向到脚本中

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?sef_rewrite=1 [L]
也许你可以试试这个:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteRule .* - [R=404,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

在开始时去掉
*
,同时尝试
REQUEST\u FILENAME
而不是
REQUEST\u URI
这两种方法我都试过了,不幸的是,它们都不起作用。我已将用于测试的修改代码添加到帖子中。您在.htaccess中还有其他内容吗?您确定正在正确处理它吗?(尝试在顶部添加
deny from all
,然后查看是否得到403)文件正在正确处理,但仍无法正常工作…htaccess文件中唯一的其他内容是一些注释,我删除了这些注释,以防它们引起问题,但这并没有如预期的那样改变任何内容。我完全不明白为什么这不起作用,因为我甚至在Joomla的htaccess文件和购物车软件中看到过这样的代码,以防止尝试重新映射图像文件,而且在那里效果很好。我们甚至有一些网站使用这些应用程序运行在完全相同的服务器上,没有任何问题。我为此更新了文件,但它似乎仍然不起作用。这似乎是正确的做法,通过尝试匹配无效图像的请求并将其重新映射到404错误,但由于某种原因,它似乎仍然无法捕获图像请求。我昨天在本地主机上进行了测试,当存在不存在的图像请求时,它显示了404错误。当图像存在时,它被正确显示。当有对index.php的请求时,就会提供index.php。所以它应该会起作用。可能在您的一个子文件夹中有另一个
.htaccess
覆盖了这个文件夹?好的,这是一个有趣的发展。我已经做了一些进一步的测试,如果删除第二条规则,第一条规则似乎可以正常工作。但一旦我把第二个添加回来,它就开始向应用程序中再次抛出丢失的图像。。。这是没有意义的,因为[L]标志设置为告诉mod_rewrite在匹配该规则后忽略其余规则。。。如果有人知道为什么会忽略此标志,请告诉我,因为我以前从未遇到过类似的情况。我认为它不会忽略此标志并正确重写。如果我没有记错的话,在重写任何内容之后,会再次解析.htaccess,以检查重写的路径是否与
.htaccess
中的内容匹配。每次重写之后都是这样,直到限制或没有重写规则匹配为止。我的例子行得通,你为什么不使用它呢?:)我重新审视了这个问题,顿悟了。问题的原因实际上是由于服务器配置错误导致htaccess规则的递归。apache中没有为该帐户设置“默认”404错误页面。所以发生的事情是图像请求被“正常”处理,这导致丢失了一个.shtml文件,该文件随后被重定向到应用程序中,因为它没有查找丢失的图像文件。虽然我的原始htaccess文件在添加默认错误页面后现在可以正常工作,但我接受这个答案,因为这里的代码也是正确的。