我想在.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
答案 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$
是一个选项,但也会匹配子目录中的文件。上面的内容实现了目标,无需在复制时进行更新,尽管不是很漂亮。