当用户尝试通过在地址栏中输入 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
时,我收到屏幕截图中显示的错误。
在 Laravel 中,我设置了路线,以便当用户导航到不存在的路线时,他们会被重定向到主页(
example.com/
)。这按预期工作,但 public
目录内的文件夹(例如 css
、js
、fonts
)会忽略此行为,而是返回屏幕截图中显示的错误。
我想要的是,如果有人尝试访问像
https://example.com/css
这样的路线,他们应该被重定向到主页(example.com/
)或看到一个漂亮的自定义404页面,而不是屏幕截图中的错误。这可以使用 Laravel 来完成吗?
在
或dev.to
等真实网站上,如果您尝试访问 像laravel.com
或dev.to/assets
这样的目录,它们显示 干净的 404 页面,而不是像我的情况那样的 Apache 错误。laravel.com/build
我的.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 重写规则以来已经有一段时间了,而且我也不是 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 页面。