404未找到,但路线存在于Laravel 5.4中

404未找到,但路线存在于Laravel 5.4中,laravel,laravel-5,phpstorm,laravel-5.4,Laravel,Laravel 5,Phpstorm,Laravel 5.4,我在用PhpStorm。我可以运行并打开index.php,但是当我想按提交按钮(post sign in)时,它的显示404找不到 运行在Windows 10上的Web服务器Apache 2.4 这是我的家 这是我的路线 确保传递的url在路由中是相等的。检查表单中的参数和操作。要在mvc上获得清晰的答案,请确保在/path/To/apache2/installation/conf/httpd.conf <Directory "path/to/laravel/project/

我在用PhpStorm。我可以运行并打开
index.php
,但是当我想按提交按钮(post sign in)时,它的显示404找不到

运行在Windows 10上的Web服务器Apache 2.4

这是我的家

这是我的路线


确保传递的url在路由中是相等的。检查表单中的参数和操作。要在mvc上获得清晰的答案,请确保在
/path/To/apache2/installation/conf/httpd.conf

<Directory "path/to/laravel/project/public">
    Allowoverride All
</Directory>
然后启用Apache
mod_rewrite
模块:

sudo a2enmod rewrite

dontforget,url对文件夹名的大小写很敏感,我不太清楚为什么会有这么多反对票,特别是因为这是一个常见的问题,对于刚接触Laravel环境的人来说,原因可能是隐藏的。我知道这是一篇老文章,但我把它添加到这里是为了将来的新手

我建议尝试的第一件事是从命令行(从项目根目录)运行
php-artisan-route:list
。这将列出Laravel可以注册的所有路由,如果有任何错误,通常会显示在这里

我建议的第二件事是确保URL与路由匹配。我无法告诉您我有多少次试图弄清楚为什么我的路线返回404,仅仅是因为我的表单在我的路线定义为
/admin/insertStudent
时发布到类似
/insertStudent
的位置

我建议的第三件事是确保您调用的方法存在。您的方法是否真的被称为
postSignIn
postinsertstudio
,而不仅仅是
SignIn
InsertStudent
?请记住,URL和方法名称都区分大小写,并且应该与定义路由的位置、调用的URL和接收请求的方法相匹配


最后,如果所有这些都符合要求,我建议您尝试的最后一件事是运行
php artisan路由:clear
。这将重置路由缓存。

在尝试了几次修复后,更改服务器端口对我来说很有效,但都没有效果。我在loalhost:3000上运行,并更改为localhost:4000。我想这可能与一些内存有关,因为我也有同样的问题,并通过以下方法解决了

我有一个edit.htaccess文件

RewriteEngine On
RewriteBase /path/of/project/folder/
# change above to your site i.e.,  RewriteBase /whatever/public/

希望它对您有用

确保您添加了正确的
Accept
标题

在我的例子中,我试图访问
api
端点,但每次都没有找到收到的404资源。
当我添加了
Accept:application/json
标题时,我从匹配的路由得到了响应

这是一个老问题,但仍然是活动的。 对于windows用户,如果在项目文件夹中使用大写字符(大写字母),则应在浏览器中使用相同的字符。 如果您的项目位于
“c:\xampp\htdocs\MyProject\”
中,您应该使用
MyProject
作为url,而不是
MyProject
例如,在上述项目(MyProject)中,以下路线:

Route::get('/dashboard', function () {
    return 'welcome to dashboard!';
});
如果您使用:

http://MyProject/dashboard

但是在目录中使用小写字符更好我最近也遇到了同样的问题,我认为我使用了一个保留字,我在目录中找不到它

最初我的路由/web.php是:

Route::post('sysinfo/store',['as'=>'sysinfo.store', 'uses'=>'SysinfoController@store']);
在我换了另一个名字后,如下图所示,它成功了

Route::post('newsysinfo/store',['as'=>'newsysinfo.store',   'uses'=>'SysinfoController@store']);
奇怪的是我还有其他工作路线,比如:

Route::get('sysinfo/',['as'=>'sysinfo.index',   'uses'=>'SysinfoController@index']);
Route::post('sysinfo/{sysinfo}',['as'=>'sysinfo.update',   'uses'=>'SysinfoController@update']);
Route::get('sysinfo/create',['as'=>'sysinfo.create',   'uses'=>'SysinfoController@create']);
Route::get('sysinfo/{id}/edit',['as'=>'sysinfo.edit',   'uses'=>'SysinfoController@edit']);
Route::get('sysinfo/{sysinfo}/destroy',['as'=>'sysinfo.destroy',   'uses'=>'SysinfoController@destroy']);

虽然这不是对问题原因的解释,但也许此解决方法可以帮助您。

不要忘记路线的顺序。例如,如果要转到
/path/second
并注册以下路由:

Route::get('/path/{dynamic_second}', 'Controller@actionDynamic');

Route::get('/path/{dynamic_second}/{dynamic_third}', 'Controller@third');

Route::get('/path/second', 'Controller@action');
这将中断,因为
/path/{dynamic_second}
消耗了
/second

如果您想访问
/path/second
,必须按如下方式列出您的路线:

Route::get('/path/second', 'Controller@action');

Route::get('/path/{dynamic_second}', 'Controller@actionDynamic');

Route::get('/path/{dynamic_second}/{dynamic_third}', 'Controller@third');
试一试

然后键入此项,查看列表中是否存在您的路线

php artisan route:list
并且在中间件\VerifyCsrfToken.php中也允许检查post路由


class VerifyCsrfToken extends Middleware {

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*'
    ];

}


更新2020

上面发生了很多案例,我又遇到了一个案例,但我还是忘记了,有时我不知道为什么。这是一些url模式是相同的,例如abc.com/c/{get_an_id}abc.com/c/get_text。您可以更改顺序,但只有第一个可以运行,第二个url为404。

我也遇到了同样的问题&通过更改路由的排序方式解决了这个问题

之前:

Route::get('/p/{post}', 'PostsController@show');
Route::get('/p/create', 'PostsController@create');
之后:(而404消失了)


我也有同样的问题,但解决方法很简单:

转到cmd并点击cd#您的项目路径#

然后点击php artisan serve


将给定服务器()的链接复制到您的浏览器中,它就会工作

我为我的路线不起作用而发疯,这里还有一个快速修复方法。我的路线如下:
users/{user}/user-detail-changes/{user-detail-change}/updatestatus

修复方法是重命名参数。Laravel不接受减号
-
。 相反,您必须使用
camelCase
或下划线(
\uu
)变量命名约定
所以它必须是这样的:
users/{user}/用户详细信息更改/{userDetailChange}/更新状态

你好!!我以前也遇到过这个问题。请检查Apache的httpd.conf文件。通过从代码的起始行删除
#
,确保启用了
LoadModule rewrite\u module modules/mod\u rewrite.so

还可以在httpd.conf中从Require all denied更改为Require all grated、AllowOverride all和Options索引FollowSymLinks

像这样:


也许这对某人有帮助,我解决了这个问题,改变了我在拉雷维尔的路线

在我的例子中,我遇到了路由..users/crea-->404错误

Route::get('users','Admin\UserController@ind

class VerifyCsrfToken extends Middleware {

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*'
    ];

}

Route::get('/p/{post}', 'PostsController@show');
Route::get('/p/create', 'PostsController@create');
Route::get('/p/create', 'PostsController@create');
Route::get('/p/{post}', 'PostsController@show');
# disable directory browsing, but specific file browsing is possible, e.g. /js/bootstrap.js
        
    Options ExecCGI Includes IncludesNOEXEC SymLinksIfOwnerMatch
#To set which file will be acted as index file: DirectoryIndex index.php
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

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

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

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


<Files 403.shtml>
order allow,deny
allow from all
</Files>

# deny from some DDoS attackers ip
# deny from 69.171.251.0/24


# php -- BEGIN cPanel-generated handler, do not edit
# This domain inherits the “PHP” package.
# php -- END cPanel-generated handler, do not edit