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

如何在Laravel 9中排除news目录,使其可直接访问?

问题描述

我基于Laravel 9搭建了网站,在根目录(httpdocs)中添加了名为"news"的目录。访问主站(如mywebsite.com)时Laravel运行正常,但访问mywebsite.com/news时,Laravel机制会触发并显示错误页面。

需要实现:访问"news"目录及其内部内容时,不激活Laravel机制。

当前根目录下的.htaccess内容:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

public文件夹内的.htaccess内容:

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

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

服务器环境:Apache Plesk


解决方案

直接修改根目录下的.htaccess,添加规则排除news目录,让Apache直接处理该目录的请求,不再转发到Laravel的public目录。修改后的完整代码如下:

RewriteEngine on
# 跳过news目录的转发,直接访问本地文件
RewriteCond %{REQUEST_URI} !^/news
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

原理说明

原来的根目录.htaccess会把所有非public开头的请求都转发到public目录,包括/news。新增的RewriteCond %{REQUEST_URI} !^/news规则会让Apache跳过对/news路径的转发逻辑,直接读取根目录下news文件夹里的实际内容,自然不会触发Laravel的路由机制。

排查要点

如果修改后还是有问题,可以检查:

  • 确认根目录下的news文件夹权限设置正确,Apache运行用户有读取权限
  • 若news目录内有自定义.htaccess,确保其规则和主规则不冲突
  • 清空浏览器缓存后重新测试访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:36:11