如果没有找到索引文件,htaccess会重写为root索引

时间:2015-03-30 08:57:45

标签: php apache .htaccess mod-rewrite

我的网站在某些文件夹中预先存在index.php文件。作为推动网站更加动态,并从集中索引文件路由的一部分,如果在该目录中找不到索引(php | htm | html),我希望我网站上的所有子目录都重写为根index.php。

--+ /
  | /index.php
  +--+
  |  + /subdir1
  |
  |--+
     | /subdir2
     + /subdir2/index.php

所以subdir1将使用root index.php,但是subdir2将使用它在其目录中的index.php文件。

我使用过FallbackResource,因为那正是我想要的:

#Use root index.php
FallbackResource /index.php

但是,我发现当我使用它时,我收到以下错误消息。

Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING

所以我又回到了旧时代:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [NC,QSA,L]

但我不确定如何排除已存在索引文件的子目录。

^!/index\.(php|htm|html)

那样的东西?

1 个答案:

答案 0 :(得分:1)

您可以在root .htaccess中使用此规则:

DirectoryIndex index.html index.htm index.php
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1/index\.html !-f 
RewriteCond %{DOCUMENT_ROOT}/$1/index\.htm !-f 
RewriteCond %{DOCUMENT_ROOT}/$1/index\.php !-f 
RewriteRule ^(.+?)(?:/[^/]+)?/?$ index.php [L]