Apache 仅授权.htaccess中的2个文件
我只想在.htaccess中授权两件事: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
->交付文件/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]