Laravel 5.2快速入门指南给出了Not Found Error

时间:2016-02-07 00:18:54

标签: laravel ubuntu

编辑:我认为这个问题是由于没有正确设置apache,这两个链接帮助了我。

解决方案:

http://laravel.io/forum/06-11-2014-not-found-but-route-exists

https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts

结束编辑

我正在关注Laravel 5.2快速入门指南。 https://laravel.com/docs/5.2/quickstart

我正在运行ubuntu 14.04.2

网站最初运行,但是当我点击添加任务按钮时 我遇到了404 Not Found错误。

根据指南,我运行以下命令来设置完整的快速入门项目。

git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
php artisan migrate

此外,我运行以下命令,因为我在ubuntu服务器上:

sudo chown -R www-data.www-data quickstart
sudo chmod -R 755 quickstart
sudo chmod 777 quickstart/storage

routes.php文件如下所示:

<?php
use App\Task;
use Illuminate\Http\Request;

Route::group(['middleware' => ['web']], function () {
    //
    Route::get('/', function () {

        $tasks = Task::orderBy('created_at', 'asc')->get();

        return view('tasks', [
            'tasks' => $tasks
        ]);
    });

    Route::post('/task', function (Request $request) {

        $validator = Validator::make($request->all(), [
            'name' => 'required|max:255',
        ]);

        if($validator->fails()) {
 return redirect('/')
                ->withInput()
                ->withErrors($validator);
        }

        $task = new Task;
        $task->name = $request->name;
        $task->save();

        return redirect('/');
    });
        //
    Route::delete('/task/{task}', function (Task $task) {
    $task->delete();

    return redirect('/');

    });

});

我尝试从:

更改resources / view / tasks.blade.php中的一些代码
 <!-- New Task Form -->
                    <form action="/task" method="POST" class="form-horizontal">

到laravel项目的实际公用文件夹的位置:

 <!-- New Task Form -->
                    <form action="/learninglaravel/laraquickstart/quickstart/public/task" method="POST" class="form-horizontal">

所以我的问题是只有当我按下按钮时才会出现404错误

// *****编辑:

我尝试过修改后期路线,但这并没有解决问题。

Route::post('/learninglaravel/laraquickstart/quickstart/public/task', function (Request $request) {

            $validator = Validator::make($request->all(), [
                'name' => 'required|max:255',
            ]);

            if($validator->fails()) {
     return redirect('/')
                    ->withInput()
                    ->withErrors($validator);
            }

            $task = new Task;
            $task->name = $request->name;
            $task->save();

            return redirect('/');
        });

错误是:

Not Found

The requested URL /learninglaravel/laraquickstart/quickstart/public/task was not found on this server.

而不是:

Not Found

The requested URL /task was not found on this server.

我做了你建议的詹姆斯而你是对的,它使URL改为

/ learninglaravel / laraquickstart / quickstart / public / task

但我仍然收到找不到页面的错误。唯一的区别是错误消息从波纹管错误更改为上述错误。 (我也尝试手动更改route.php文件中的url和tasks.blade.php来反映相同的url。所以上面的URL都在routes.php和tasks.blade.php

我在ubuntu AWS服务器上运行可能是因为我犯了错误?我认为快速启动教程是针对宅基地编写的,因为我遇到了数据库的问题。(我只需要手动创建一个。指南从未指定过。我认为它可能是在宅基地预先配置以自动使用数据库)< / p>

干杯

3 个答案:

答案 0 :(得分:2)

Quickstart上的指南中,您可以使用url helper生成表单操作网址,其中包含:

  

生成指定路径的完全限定URL。

因此,您可以在表单上使用它:

<!-- New Task Form -->           
<form action="{{ url('task') }}" method="POST" class="form-horizontal">

这将确保您始终发布到您的域的正确网址,而无需您自己手动指定。

试一试,看看我的意思,但在你的情况下,它会为你的任务路线生成一个网址(基于你的评论); 52.60.22.45/learninglaravel/laraquickstart/quickstart/public/task

答案 1 :(得分:1)

将表单操作参数更改为

'use strict';

var Bluebird = require('bluebird');
var request = Bluebird.promisifyAll(require('request'), { multiArgs: true });
var Oauth = require('oauth');
var OAuth2 = OAuth.OAuth2;
var _ = require('lodash');

function Client(options) {

    this.options = _.assign({
        url: '<API URL>',
        oauth2Url: 'oauth2/token',
        apiVersion: process.env.apiVersion,
        consumerKey: process.env.consumerKey,
        consumerSecret: process.env.consumerSecret
    }, options);

    if (!this.options.url) {
        throw new Error('Missing client url.');
    }

    ...

    if (!this.options.consumerSecret) {
        throw new Error('Missing consumer secret.');
    }


    if(!this.access_token){
        var oauth2 = new OAuth2(
            this.options.consumerKey,
            this.options.consumerSecret,
            this.options.url + this.options.version,
      null,
            this.options.oauth2Url,
            null);
        oauth2.getOAuthAccessToken(
       '',
       {'grant_type':'client_credentials'},
       function (e, access_token, refresh_token, results){
                 this.access_token = access_token;
                 this.refresh_token = refresh_token;
       done();
     });
    }

}

Client.prototype.queryApi = function (options, callback) {
    return request.postAsync({
        headers: {
        Authorization: 'Bearer ' + access_token
    },
        url: this.options.url + this.options.apiVersion,
        body: JSON.stringify(options)}).
        then(function (result) {
            var json = JSON.parse(result[1]);

            if (_.isFunction(callback)) {
                callback(null, json);
            }
            return json;
        }).
        catch(function (err) {
            if (_.isFunction(callback)) {
                callback(err);
                return;
            }
            throw err;
        });
};

module.exports = Client;

您将向

发出HTTP POST请求
/learninglaravel/laraquickstart/quickstart/public/task

所以laravel会寻找这条路线,显然它不会找到它。

答案 2 :(得分:0)

刚启用mod_rewrite引擎,它将完美运行。 我花了2个多小时才找到解决方案和解决方案。所以不要浪费你的时间,只需按照命令启用mod_rewrite引擎,然后再试一次:

sudo a2enmod rewrite

不要忘记重启apache服务器

sudo /etc/init.d/apache2 restart

sudo service apache2 restart