我在Apache中有一个站点,该文件夹是:
/var/www/html/content
这一层有index.html
/var/www/html/content/index.html
我有很多子文件夹,但不是所有的都有index.html
所以我想如果有人去:http://example.com/subfolder/subfolder
,这个子文件夹不包含index.html
,重定向到:http://example.com/
我尝试在content文件夹中使用.htaccess
文件,使用以下规则:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.html [L]
但是Apache告诉我这个:
内部服务器错误
您的重新连接条件说,只有重写到index.html,如果请求是一个文件或文件夹不存在,即任何人请求一个存在的文件或文件夹将阻止重写规则激活,因此很容易绕过你正在尝试做的。
不管怎样,你一开始就用错了方法,你应该做的是限制对所有目录的访问,然后只允许用户访问你想要用户访问的目录。对于不能正确配置apache限制的不兼容的开发人员来说,将索引文件放在目录中只是一个故障保护。
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /index.html [L]
这将导致内部服务器错误(500响应),如果mod_rewrite没有在您的服务器上启用,或者/index.html
不存在(这似乎不太可能给出你在问题中所说的)。
但是,这里似乎根本不需要mod_rewrite。
如果您想从请求的目录(如果存在的话)提供index.html
,否则默认从文档根目录(没有外部重定向)提供/index.html
,那么您可以简单地修改DirectoryIndex
。例如:
DirectoryIndex index.html /index.html
DirectoryIndex
指令列出了请求目录时要尝试的文件。在本例中,index.html
引用当前请求目录中的一个文件。如果不存在,则在文档根目录中尝试/index.html
(一个根相对URL)。
参考:
- https://httpd.apache.org/docs/2.4/mod/mod_dir.html directoryindex