You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止Symfony应用通过public目录路径访问?

禁止Symfony应用通过/public路径访问的.htaccess解决方案

可以通过修改根目录下的.htaccess实现禁止直接访问example.com/public的需求,具体方案如下:

核心思路

在现有规则前添加拦截逻辑,识别对/public的直接请求并处理(重定向或拒绝访问),避免和内部转发到public目录的规则冲突。

方案1:将/public请求重定向到根路径(301永久重定向)

在根目录.htaccess的RewriteEngine On之后、HTTPS/WWW重定向规则之前,插入以下规则:

# 拦截直接访问/public的请求,重定向到对应根路径资源
RewriteCond %{THE_REQUEST} /public/ [NC]
RewriteRule ^public/(.*)$ /$1 [L,NE,R=301]

这样用户访问example.com/public/xxx会被自动跳转到example.com/xxx,不影响正常使用,同时规范访问路径。

方案2:直接返回403禁止访问

如果希望直接拒绝访问/public路径,可替换为以下规则:

# 禁止直接访问/public路径,返回403权限错误
RewriteCond %{THE_REQUEST} /public/ [NC]
RewriteRule ^public/ - [L,R=403]

修改后的完整根目录.htaccess示例

RewriteEngine On

# 拦截/public直接访问的规则(二选一)
RewriteCond %{THE_REQUEST} /public/ [NC]
RewriteRule ^public/(.*)$ /$1 [L,NE,R=301]

# HTTPS与WWW域名标准化
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

# 内部转发非public请求到public目录
RewriteCond %{REQUEST_URI} !^public/ [NC]
RewriteRule ^(.*)$ /public/$1 [QSA,L,NE]

说明

  • 使用%{THE_REQUEST}是因为它记录的是用户发起的原始请求,能精准区分直接访问/public的请求和服务器内部转发到/public的请求,避免循环重定向。
  • public目录下的.htaccess无需修改,内部转发的请求仍会正常处理。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:38:38