我在.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:它仍然不能在我的活动框中使用点转义。如果我将第二个块移到第一个块之上,那么一切都会被打磨。
答案 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]