Apache据说忽略了htaccess指令?

时间:2013-07-17 18:20:45

标签: .htaccess

我在.htaccess文件中有以下内容:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteCond %{REQUEST_FILENAME} !admin\.php$
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^.*$ - [G]

RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

应该做的是,如果文件是有效文件,则不应该发生任何事情(文件应该正常处理) - 这个工作。

接下来,如果文件的扩展名为.php,但不是admin.php,那么它应该返回410 Gone状态。这不起作用 - 它总是转到下一个指令,第二个块被忽略。

示例网址:http://<my site>/file.php - 不返回410,转到最后一个指令。

为什么会这样?

(另外,我不认为stackoverflow是这个问题的网站,但我想不出是什么:/)

编辑:我应该指出,这在我的Windows localhost上工作正常,但在我的live linux服务器上没有。

EDIT2:它仍然不能在我的活动框中使用点转义。如果我将第二个块移到第一个块之上,那么一切都会被打磨。

2 个答案:

答案 0 :(得分:0)

.htaccess文件是否在其中一个用户目录中?如果是这样,那么问题可能是您需要在apache配置中指定AllowOverride。有关详细信息,请参阅http://httpd.apache.org/docs/2.0/howto/htaccess.html

答案 1 :(得分:0)

http://<my site>/file.php未提供GONE消息,因为您之前有此规则:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

这意味着忽略真实文件,链接或目录的.htaccess规则。如果您希望为.php文件显示GONE消息,请排除.php文件的此跳过规则,如下所示:

RewriteCond %{REQUEST_FILENAME} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]