如何在 Laravel 中重定向或显示 css 和 js 文件夹的自定义 404?

问题描述 投票:0回答:1

当用户尝试通过在地址栏中输入 URL 直接访问

css
文件夹下的
js
public
目录时,如何将用户重定向到网站根目录或显示自定义 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>

请耐心等待我。我是一个完全的开发初学者,请不要取笑我或居高临下,请引导我走上正确的道路。

php laravel apache
1个回答
0
投票

好吧,自从我编写 Apache 重写规则以来已经有一段时间了,而且我也不是 Laravel 路由方面的专家,但我认为只需注释掉本节中的

!-d
行即可获得所需的行为:

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

如果请求的名称恰好是有效目录,那么它将由 Laravel 的路由器处理,这会做什么……谁知道呢。希望确定这不是有效的路线并提供 404 页面。

或者,您可以在

RewriteEngine On
# Handle Authorization Header
之间添加这两行:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L,R=404]

这表示“如果请求的 URL 引用真实目录,则停止处理规则并立即回复 404”。请注意,这将阻止请求发送到您的 Laravel 应用程序,因此您将获得 Apache 404 页面,而不是 Laravel 404 页面。

© www.soinside.com 2019 - 2024. All rights reserved.