.htaccess索引阻塞的奇怪行为

时间:2016-01-27 22:15:46

标签: php .htaccess mod-rewrite

我在网站根文件夹的.htaccess文件中从索引块中排除文件夹时遇到了一些问题。

在搞砸了一下后,我找到了一个解决方案:

<IfModule mod_rewrite.c>
   RewriteEngine on
</IfModule>

我在我想要排除的文件夹中的新.htaccess文件中写了这个。这解决了我的问题(在保持子文件夹被阻止的情况下解锁该特定文件夹)这很好,但据我所知,这段代码不应该做任何事情。这怎么可能有效?

其他信息:
- 排除文件夹包含Nibbleblog安装
- 根.htaccess文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

RewriteCond %{HTTPS} !^on$ 
RewriteRule (.*) https://url.url/$1 [R,L]

RewriteCond %{HTTP_HOST} ^www\.nyxcode\.xyz [NC]
RewriteRule (.*) https://url.url/$1 [R=301,L]

ErrorDocument 404 /errors/notfound.html
ErrorDocument 403 /errors/forbid.html

Options -Indexes

1 个答案:

答案 0 :(得分:0)

通过将RewriteEngine on添加到子文件夹中的.htaccess文件,您已告诉Apache父文件夹的.htaccess不会控制子文件夹中的重写。这是因为Apache首先检查与URL匹配的文件夹,然后才查找父文件夹。

如果你有这个:

/
   .htaccess
   /subfolder1
       .htaccess
   /subfolder2
       # no .htaccess file here

然后//subfolder2中的文件受RewriteRule中的/.htaccess约束。但是/subfolder1仅受其自己的.htaccess文件的约束,只要它适用。如果没有RewriteEngine on,您就无法告诉Apache /subfolder1/.htaccess适用于重写目的。使用RewriteEngine on,您正在说,&#34;使用此.htaccess进行重写,&#34;即使那里没有规则。