Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 仅授权.htaccess中的2个文件_Apache_.htaccess - Fatal编程技术网

Apache 仅授权.htaccess中的2个文件

Apache 仅授权.htaccess中的2个文件,apache,.htaccess,Apache,.htaccess,我只想在.htaccess中授权两件事: /favicon.ico->交付文件 /->index.php 因此,/logs/mylog.log和/hello.py应该转到index.php,而不是显示这些文件(确实存在!)的原始内容 如何做这样一个.htaccess 我试过: 解决方案#1(似乎创建了一个无限循环): 解决方案#2(提供/logs/mylog.log和/hello.py文件,这不应该发生!): 这可以做到: RewriteEngine On RewriteCond %{RE

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

  • /favicon.ico
    ->交付文件

  • /
    ->index.php

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

如何做这样一个.htaccess


我试过:

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

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

这可以做到:

RewriteEngine On
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^ index.php
删除了检查它是否是现有文件或目录的行,因为您希望这些行也被重写

添加了一个检查,以确保它不是index.php,从而避免循环

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

在请求uri匹配的开始处添加了正斜杠,否则它们将不匹配

删除了重写规则中未使用的捕获

更新

在评论中的进一步讨论中,如果将
.htaccess
文件的副本放在子目录中,则应该可以使用此功能。以下是一个更新,可以正常工作:

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

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

为什么要在
中使用斜杠=/php
index.php
并不总是我网站的根目录。i、 e.它是否适用于
example.com/mywebsite/index.php
example.com/index.php
/mywebsite/index.php
将被重写为
/index.php
。您的意思是希望
index.php
特定于每个目录吗?那么目录中的内容会被重写到该目录中的
index.php
?这是完全不同的,更复杂的事情,如果是这样的话,我可以更新我的答案。假设我有
example.com/anotherwebsite/
(这里不重要)和
example.com/mywebsite/
,其中包含了我所说的
example.com/mywebsite/.htaccess
。然后我不希望
example.com/mywebsite/
被重定向到
example.com/index.php
,而是要重定向到
example.com/mywebsite/index.php
。好的,当然,它应该在子目录中工作,但只有当htaccess文件放在那里时才可以。否则,子目录中的任何内容都会使用htaccess文件重写到最低级别目录中的index.php。我更新了答案来做到这一点。结束标志很重要,否则它将被目录结构更高的htaccess文件再次重写。
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^ index.php
RewriteEngine On
RewriteRule !^(?:favicon\.ico|index\.php)$ index.php [END]