Laravel 一条路线无效
Laravel ONE route not working
我在 Laravel 5.2 有一个项目,但有一个问题是一条路线不起作用。当我调用这条路由时,它会转到 Apache 404。
这些是我的一些路线:
Route::get ('/icons', 'IconController@index');
Route::get ('/icons/create', 'IconController@create');
Route::post ('/icons', 'IconController@store');
Route::get ('/icons/{id}/edit', 'IconController@edit');
Route::patch ('/icons/{id}', 'IconController@update');
Route::delete ('/icons', 'IconController@destroy');
如您所见,这些是 CRUD 路由。我的应用程序中有更多这样的路线,但只是 '/icons/{id}/edit'
给我错误。
我已经尝试更改路由以调用视图,但错误仍然存在。
Route::get ('/icons/{id}/edit', function () {
return view('welcome');
});
在我的开发机器中路由有效,但在生产服务器中不行。
开发者机器:OSX + Apache + php7
生产服务器:Ubuntu 16 + Apache + php7
我应该怎么做才能解决这些问题?如果您需要更多信息,请告诉我。谢谢。
编辑:
IconController 扩展了 GeneralController。
在 GeneralController 中我有:
public function edit($id, Request $request)
{
$log = new ActivityLogRepository();
$log->store($request, 'R');
$this->request = $request;
$segments = $request->segments();
return view($this->viewDir.'.form', [
'data' => $this->editData($id),
'name' => $this->name,
'icon' => $this->icon,
'nameAction' => trans('messages.button_'.end($segments)),
'baseRoute' => $this->baseRoute,
'viewDir' => $this->viewDir,
]);
}
在 IconController 中我有:
protected function editData($id)
{
$record = Icon::findOrFail($id);
return (object)['record' => $record];
}
所有 CRUD 控制器的工作方式相同。
编辑 2:
Apache 日志。我访问了图标页面,然后访问了另一个 CRUD(客户端)。
my_ip - - [01/Sep/2017:13:21:40 +0000] "GET / HTTP/1.1" 302 1377 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:40 +0000] "GET /login HTTP/1.1" 200 2881 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:55 +0000] "POST /login HTTP/1.1" 302 1347 "http://example.com/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:55 +0000] "GET / HTTP/1.1" 200 11140 "http://example.com/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:56 +0000] "GET /images/users/thumbs/5968097a83fae.png HTTP/1.1" 304 181 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:57 +0000] "GET /events/notification HTTP/1.1" 200 972 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:22:04 +0000] "GET /icons HTTP/1.1" 200 7285 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:22:11 +0000] "GET /icons/44/edit HTTP/1.1" 404 510 "http://example.com/icons" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:29:18 +0000] "GET /clients HTTP/1.1" 200 6523 "http://example.com/icons" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:29:20 +0000] "GET /clients/16/edit HTTP/1.1" 200 12344 "http://example.com/clients" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
icons
是 Apache 中的标准别名。 Laravel 的 .htaccess
默认设置为 Laravel 将仅处理对不存在的文件或目录的请求。查看路线:
Route::get ('/icons', 'IconController@index');
Route::get ('/icons/create', 'IconController@create');
Route::post ('/icons', 'IconController@store');
就Apache 而言,这些看起来都像是对文件的请求。这些文件不存在,因此 Laravel 处理请求,它们都工作正常。
Route::get ('/icons/{id}/edit', 'IconController@edit');
icons/
之后的尾部斜线表示 Apache 认为它是一个目录,而 Apache 确实 知道一个名为 icons 的目录 - 它的标准图标别名。所以Laravel不处理这个请求,留给Apache处理。但是在 Apache 的图标目录中没有名为“44”(或传递的任何 ID)的目录,因此 Apache 抛出 404。
解决方案是删除 Apache 的 icons
别名(假设您不需要它),as described for eg here,或者为此路由使用不同的名称,例如 my-icons
等.
我在 Laravel 5.2 有一个项目,但有一个问题是一条路线不起作用。当我调用这条路由时,它会转到 Apache 404。
这些是我的一些路线:
Route::get ('/icons', 'IconController@index');
Route::get ('/icons/create', 'IconController@create');
Route::post ('/icons', 'IconController@store');
Route::get ('/icons/{id}/edit', 'IconController@edit');
Route::patch ('/icons/{id}', 'IconController@update');
Route::delete ('/icons', 'IconController@destroy');
如您所见,这些是 CRUD 路由。我的应用程序中有更多这样的路线,但只是 '/icons/{id}/edit'
给我错误。
我已经尝试更改路由以调用视图,但错误仍然存在。
Route::get ('/icons/{id}/edit', function () {
return view('welcome');
});
在我的开发机器中路由有效,但在生产服务器中不行。
开发者机器:OSX + Apache + php7
生产服务器:Ubuntu 16 + Apache + php7
我应该怎么做才能解决这些问题?如果您需要更多信息,请告诉我。谢谢。
编辑:
IconController 扩展了 GeneralController。
在 GeneralController 中我有:
public function edit($id, Request $request)
{
$log = new ActivityLogRepository();
$log->store($request, 'R');
$this->request = $request;
$segments = $request->segments();
return view($this->viewDir.'.form', [
'data' => $this->editData($id),
'name' => $this->name,
'icon' => $this->icon,
'nameAction' => trans('messages.button_'.end($segments)),
'baseRoute' => $this->baseRoute,
'viewDir' => $this->viewDir,
]);
}
在 IconController 中我有:
protected function editData($id)
{
$record = Icon::findOrFail($id);
return (object)['record' => $record];
}
所有 CRUD 控制器的工作方式相同。
编辑 2:
Apache 日志。我访问了图标页面,然后访问了另一个 CRUD(客户端)。
my_ip - - [01/Sep/2017:13:21:40 +0000] "GET / HTTP/1.1" 302 1377 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:40 +0000] "GET /login HTTP/1.1" 200 2881 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:55 +0000] "POST /login HTTP/1.1" 302 1347 "http://example.com/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:55 +0000] "GET / HTTP/1.1" 200 11140 "http://example.com/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:56 +0000] "GET /images/users/thumbs/5968097a83fae.png HTTP/1.1" 304 181 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:21:57 +0000] "GET /events/notification HTTP/1.1" 200 972 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:22:04 +0000] "GET /icons HTTP/1.1" 200 7285 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:22:11 +0000] "GET /icons/44/edit HTTP/1.1" 404 510 "http://example.com/icons" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:29:18 +0000] "GET /clients HTTP/1.1" 200 6523 "http://example.com/icons" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
my_ip - - [01/Sep/2017:13:29:20 +0000] "GET /clients/16/edit HTTP/1.1" 200 12344 "http://example.com/clients" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
icons
是 Apache 中的标准别名。 Laravel 的 .htaccess
默认设置为 Laravel 将仅处理对不存在的文件或目录的请求。查看路线:
Route::get ('/icons', 'IconController@index');
Route::get ('/icons/create', 'IconController@create');
Route::post ('/icons', 'IconController@store');
就Apache 而言,这些看起来都像是对文件的请求。这些文件不存在,因此 Laravel 处理请求,它们都工作正常。
Route::get ('/icons/{id}/edit', 'IconController@edit');
icons/
之后的尾部斜线表示 Apache 认为它是一个目录,而 Apache 确实 知道一个名为 icons 的目录 - 它的标准图标别名。所以Laravel不处理这个请求,留给Apache处理。但是在 Apache 的图标目录中没有名为“44”(或传递的任何 ID)的目录,因此 Apache 抛出 404。
解决方案是删除 Apache 的 icons
别名(假设您不需要它),as described for eg here,或者为此路由使用不同的名称,例如 my-icons
等.