.htaccess隐藏pages子文件夹后,无尾斜杠链接重定向异常修复求助
修复.htaccess路径隐藏及重定向问题
问题原因
你遇到的跳转是Apache默认的目录自动斜杠重定向机制导致的:当请求的目标是/pages/下真实存在的目录(比如/pages/contacts),Apache会自动将无结尾斜杠的请求重定向到带斜杠的真实路径,从而暴露了/pages/前缀。
修复方案
修改.htaccess规则,先禁用默认的目录斜杠跳转,再补充自定义规则处理目录访问,同时保留原有的文件转发逻辑:
RewriteEngine On # 禁用Apache默认的目录自动加斜杠重定向,避免暴露真实路径 DirectorySlash Off # 规则1:如果请求对应/pages下的真实目录且URL无结尾斜杠,重定向到带斜杠的友好URL RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d RewriteRule ^(.*[^/])$ /$1/ [R=301,L] # 规则2:将请求转发到/pages目录,隐藏真实路径 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /pages/$1 [L]
规则说明
DirectorySlash Off:关闭Apache自动给目录加斜杠的默认行为,阻止它暴露/pages/真实路径。- 第一条Rewrite规则:检查请求对应的
/pages/下是否为真实目录,若当前URL无结尾斜杠,就通过301重定向到带斜杠的友好URL(比如site.com/contacts→site.com/contacts/),用户全程看不到/pages/前缀。 - 第二条规则:保留你原有的逻辑,将非文件、非目录的请求转发到
/pages/目录下,实现路径隐藏。
注意事项
- 测试前清空浏览器缓存,避免301重定向缓存影响结果。
- 确保
/pages/目录及子目录的权限正常,Apache能正常访问。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

