编辑:我认为这个问题是由于没有正确设置apache,这两个链接帮助了我。
解决方案:
http://laravel.io/forum/06-11-2014-not-found-but-route-exists
结束编辑
我正在关注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>
干杯
答案 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