如何通过.htaccess将根目录指向子目录且不暴露文件夹路径
Flarum 根目录URL重写解决方案
问题原因
你当前的.htaccess规则中,根路径匹配逻辑会触发Apache的mod_dir模块自动跳转,导致URL暴露真实子目录路径。需要调整规则实现内部转发而非外部跳转。
修正后的根目录.htaccess配置
替换根目录下的.htaccess内容为以下规则:
RewriteEngine On # 禁止直接访问flarum目录,提升安全性 RewriteRule ^flarum(/.*)?$ - [R=404,L] # 将所有请求内部转发到flarum/public,不暴露URL路径 RewriteCond %{REQUEST_URI} !^/flarum/public/ RewriteRule ^(.*)$ /flarum/public/$1 [L]
关键说明
- 第一条规则拦截对/flarum目录的直接访问,返回404,避免泄露应用结构。
- 第二条规则是核心:只要请求未指向flarum/public,就将请求内部转发到对应路径,浏览器地址栏始终显示
website.com开头,不会出现/flarum/public。
确认Flarum默认配置
保持flarum/public/.htaccess为Flarum默认配置即可,它负责处理应用内部的路由重写:
<IfModule mod_rewrite.c> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
额外检查项
- 确保服务器已开启
mod_rewrite模块。 - 确认Apache站点配置中,
public_html目录的AllowOverride设置为All,否则.htaccess规则无法生效。 - 测试前清除浏览器缓存,避免旧的重定向缓存影响结果。
内容的提问来源于stack exchange,提问作者hammies
相关产品推荐
相关产品推荐

