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

Laravel7使用.htaccess排除指定目录被路由拦截问题求助

Laravel 7路由排除特定目录问题及解决方案

问题背景

需要在Laravel 7的路由规则中排除一个特定目录,初始服务器目录结构如下:

/var/www/myproject.local
/var/www/dir_to_exclude

可根据需求将dir_to_exclude移动到Laravel根文件夹内。
最初使用网上找到的.htaccess配置未生效,访问被排除目录下的文件时始终返回Laravel 404页面,配置内容如下:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteBase /

  RewriteRule ^(dir_to_exclude) - [L]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

服务器host文件配置:

IP_ADDESS  myproject.local  myproject

主机名显示为myproject。

调整尝试

删除项目根目录下的.htaccess,修改public目录下的.htaccess规则,新增目录排除逻辑:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

# 处理授权头
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# 排除目标目录重写
RewriteRule ^dir_to_exclude($|/) - [L]

# 非目录路径去除末尾斜杠
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# 所有请求转发到前端控制器
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

此时项目结构如下:

/var/www/myproject
|- dir_to_exclude
|-- info.php
|- public
|-- .htaccess

访问http://www.myproject.local/dir_to_exclude/info.php时返回Apache原生404页面,仍未达到预期。
附带虚拟主机配置:

<VirtualHost *:80>
    <Directory /var/www/myproject>
            Options FollowSymLinks
            AllowOverride All
    </Directory>

    DocumentRoot /var/www/myproject
    ServerName www.myproject.local
    ErrorLog /var/log/myproject.log

    LogLevel debug

    CustomLog /var/log/access.log combined
</VirtualHost>

最终解决方法

在/public文件夹内创建指向目标目录的软链接,即可正常访问目录下的文件,满足使用需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:15:06