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

如何在Laravel中为css和js目录设置重定向或自定义404页面

问题描述

当用户在地址栏输入URL直接访问public文件夹下的css和js目录时,如何将其重定向到网站根目录或显示自定义404页面?例如访问以下URL:https://example.com/css和https://example.com/js。

我正在使用Laravel 10搭配OpenServer 5(Apache和PHP 8.1),未修改任何Apache和PHP设置,均为OpenServer默认配置。

当我访问项目中的https://example.com/css时,会出现以下错误截图:
Error

我已在Laravel中配置路由,用户访问不存在的路由时会重定向到首页(example.com/),该功能正常生效,但public目录下的文件夹(如css、js、fonts)不受此规则约束,会返回截图中的错误。

我希望当有人尝试访问https://example.com/css这类路由时,要么重定向到首页(example.com/),要么显示美观的自定义404页面,而非截图中的错误。能否通过Laravel实现此需求?

像dev.to或laravel.com这类真实网站,当尝试访问dev.to/assets或laravel.com/build这类目录时,会显示简洁的404页面,而非我遇到的Apache错误。

我的.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>

请耐心指导我,我是开发新手,请勿嘲笑或表现出优越感,引导我走上正确的解决路径。


解决方案

方法一:让目录请求走Laravel控制器

当前.htaccess规则中,真实存在的目录请求不会转发到index.php,所以Apache直接返回目录访问错误。我们可以调整规则,让所有请求(包括目录)都交给Laravel处理:

修改.htaccess里的「Send Requests To Front Controller」部分,注释或删除RewriteCond %{REQUEST_FILENAME} !-d这一行:

# Send Requests To Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d  # 注释或删除此行
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

修改后,访问/css这类目录时,Laravel会因找不到对应路由触发404异常,此时可以通过自定义404页面展示内容。

方法二:定向重指定目录到首页

如果你只想针对css、js、fonts这些目录做跳转,可在.htaccess的RewriteEngine On之后添加以下规则:

# 重定向指定目录请求到首页
RewriteRule ^(css|js|fonts)/?$ / [L,R=301]

这条规则会匹配/css、/css/、/js等路径,直接301永久重定向到网站根目录;若要临时重定向,把R=301改成R=302即可。

方法三:自定义Laravel 404页面

不管用哪种方法,要显示美观的自定义404页面,按以下步骤操作:

  1. 在Laravel项目的resources/views目录下新建errors文件夹(如果不存在)。
  2. 在errors文件夹中创建404.blade.php文件,写入自定义页面代码,示例:
<!DOCTYPE html>
<html>
<head>
    <title>页面不存在</title>
    <style>
        body { text-align: center; padding: 50px; font-family: Arial, sans-serif; }
        h1 { font-size: 50px; color: #333; }
        p { font-size: 20px; }
        a { color: #007bff; text-decoration: none; }
    </style>
</head>
<body>
    <h1>404</h1>
    <p>抱歉,你访问的页面不存在</p>
    <p><a href="/">返回首页</a></p>
</body>
</html>
  1. 当Laravel触发404异常时,会自动渲染这个页面。

注意事项

  • 修改.htaccess后,清空浏览器缓存(301重定向会被浏览器缓存)。
  • 重启OpenServer确保配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:42:08