修改.htaccess文件重写规则:解决子目录访问被跳转至404错误页的问题
解决子目录访问跳转到404错误页的问题
嘿,我来帮你搞定这个问题!首先咱们先搞清楚为什么访问/sub_folder会跳转到错误页:
你的.htaccess里有两个关键设置导致了这个情况:
Options -Indexes:这个规则禁止了服务器显示目录列表,也就是说如果某个目录里没有默认的索引文件(比如index.php、index.html),服务器不会列出目录内容,而是返回404错误。- 全局的
ErrorDocument 404 http://example.com/content/error.php:一旦触发404错误,就会跳转到这个指定的错误页面。
所以当你访问/sub_folder时,因为目录里没有默认索引文件,加上禁止了目录列表,服务器就返回404,然后触发了跳转。
接下来给你几个可行的解决方案,你可以根据需求选:
方案一:添加默认索引文件(最推荐)
这是最简单也最安全的做法,直接在sub_folder目录里新建一个默认索引文件,比如index.php或者index.html。内容可以是目录的导航页,或者直接显示你想展示的内容。这样访问/sub_folder时,服务器会自动加载这个文件,不会触发404错误。
方案二:用Rewrite规则排除子目录
如果不想添加索引文件,你可以在.htaccess的Rewrite规则部分,添加一条规则让服务器正常处理sub_folder的请求。把这段代码放在RewriteEngine On之后、其他Rewrite规则的后面:
# 允许正常访问sub_folder目录及其所有内容 RewriteRule ^sub_folder/ - [L]
这条规则的意思是:任何以sub_folder/开头的请求,直接停止后续规则的处理,让服务器按照默认逻辑去加载这个目录的内容。
方案三:允许该子目录的目录列表(不推荐,有安全风险)
如果你想让服务器列出sub_folder里的文件,可以针对这个目录修改Options设置。不过要注意,目录列表可能会暴露敏感文件,所以不建议在生产环境使用。在.htaccess里添加:
<FilesMatch "^sub_folder/*"> Options +Indexes </FilesMatch>
如果你的服务器不支持FilesMatch,也可以用:
RewriteRule ^sub_folder/ - [L,NC] Options +Indexes
最后记得检查一下sub_folder目录的权限,确保服务器有读取这个目录和里面文件的权限,避免因为权限问题导致的访问错误。
内容的提问来源于stack exchange,提问作者Geetika
相关产品推荐
相关产品推荐

