仅授权.htaccess中的2个文件

时间:2017-01-10 17:52:03

标签: apache .htaccess

我想在.htaccess中只授权两件事:

  • /favicon.ico - >提交文件

  • /<anythingelse> - &gt;的index.php

因此,/logs/mylog.log/hello.py应该转到index.php,而不是显示这些文件的原始内容(确实存在!)。

如何做这样的.htaccess?

我试过了:

解决方案#1(似乎创建了一个无限循环):

RewriteEngine On
RewriteCond %{REQUEST_URI} !favicon\.ico$
RewriteRule ^(.*)$ index.php

解决方案#2(提供/logs/mylog.log和/hello.py文件,这不应该发生!):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !favicon\.ico$
RewriteRule ^(.*)$ index.php

1 个答案:

答案 0 :(得分:2)

这样做:

RewriteEngine On
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^ index.php

删除了检查它是否是现有文件或目录的行,因为您希望这些行也被重写。

添加了一个检查,表明它不是index.php以避免循环。

将RewrieCond语法更改为更简单的简单比较。

在请求开始时添加正斜杠uri匹配或者它们不匹配。

删除了您未使用的RewriteRule中的捕获。

<强>更新

在评论中的进一步讨论中,当.htaccess文件的副本放在子目录中时,这应该有效。这是一个更新,以便工作:

RewriteEngine On
RewriteRule !^(?:favicon\.ico|index\.php)$ index.php [END]

无法在不向其添加目录名的情况下使用RewriteCond指令,因为/index\.php$是一个选项,但也会匹配子目录中的文件。上面的内容实现了目标,无需在复制时进行更新,尽管不是很漂亮。