阻止laravel接受URL中的index.php

阻止laravel接受URL中的index.php,php,laravel,routes,Php,Laravel,Routes,使用了Route::get('/'),ContnameController@methodName,当地址栏中使用myapp/index.php时,如何使Laravel(5.8及以上版本)显示其默认的404页面? 换句话说:当使用替代路径访问同一文件时,如何防止Laravel显示扩展名为.php的文件 Apache Mod Rewrite已启用,并且没有任何相关问题。与此相关的一切工作正常,所有请求都按预期定向到index.php。我只希望用户使用myapp/index.php而不是我在Route

使用了
Route::get('/'),ContnameController@methodName
,当地址栏中使用
myapp/index.php
时,如何使Laravel(5.8及以上版本)显示其默认的404页面? 换句话说:当使用替代路径访问同一文件时,如何防止Laravel显示扩展名为.php的文件

Apache Mod Rewrite已启用,并且没有任何相关问题。与此相关的一切工作正常,所有请求都按预期定向到index.php。我只希望用户使用
myapp/index.php
而不是我在
Route::get('/',…
中定义的内容。Laravel似乎可以互换地处理这两个问题


这不是Apache Mod rewrite问题的重复。现在默认(开箱即用)Laravel主页从
welcome.blade.php
中提取,并按照默认的
Route::get>通过
laravelapp/
访问(“/”,…
。但是同样的页面也可以通过
laravelapp/index.php
访问。如果你不想在你的应用程序URL中添加扩展名,这是一种预期的和可接受的行为吗?显然,如果这是不希望出现的行为,那么Apache Mod rewrite就不是罪魁祸首,即使有.htaccess修复程序。

将此写在你的
public\.ht中在
行上的重写引擎之后访问文件

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php[^/] /$1? [L,R=302,NC,NE]

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php(?:/(.*))?$ /$1$2? [L,R=302,NC,NE]

一种方法是使用重写规则,apache示例如下:

RewriteCond %{REQUEST_URI} index.php$
RewriteRule ^(.*)index.php$ $1 [R=404]
另一种方法是在您的服务提供商中添加如下内容:

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    // ...
    public function boot()
    {
        if (Str::endsWith(Arr::get($_SERVER, 'REQUEST_URI', ''), 'index.php')) {
           abort(404);
        }
    }
}

您需要启用“重写”。它已启用,并且在与“重写”模式相关的所有其他情况下都可以正常工作。它的可能重复与Apache Mod rewrite无关。在没有充分了解差异的情况下,请不要急于将一个问题链接到另一个问题。感谢您的回复。第一个建议导致显示Apache默认值找不到错误页。第二个得到了呜呜!来抛出
FatalThrowableError(E_error)找不到类“App\Providers\Str”
。是否可以将其配置为显示Laravel默认404页面?
Str
needs
在名称空间后的文件顶部使用illumb\Support\Str;
Arr
可能还需要
使用illumb\Support\Arr;
是的!现在它可以正常工作了!非常感谢。谢谢响应到此为止。这导致从地址栏中省略了
index.php
,但将请求重定向到主页。我尝试的是让它显示Laravel 404默认值(或自定义值)页面。这可能吗?是的,这是可能的,但在这种情况下,你必须重定向到另一个url,在那里你可以称你为自定义错误模板。在我用问题困扰好人之前,我努力想办法做类似的事,但我就是不能用正确的方法。如果可能,请告诉我步骤。感谢回复安塞。