0

我在 .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 状态。这不起作用 - 它总是转到下一个指令,并且第二个块被忽略。

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

为什么会这样?

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

编辑:我可能应该指出,这在我的 Windows localhost 上运行良好,但在我的 live linux 服务器上却不行。

EDIT2:它仍然无法在我的直播框中使用转义点。如果我将第二个块移到第一个块之上,一切都消失了。

4

2 回答 2

0

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

于 2013-07-17T18:23:37.187 回答
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 规则。如果您希望为文件显示 GONE 消息,则为.php文件排除此跳过规则,.php如下所示:

RewriteCond %{REQUEST_FILENAME} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
于 2013-07-18T07:49:00.477 回答