2017-09-01 160 views
0

我在Laravel 5.2中有一个项目,并且有一条路线不起作用的问题。当我把这个路径它关系到Apache的404Laravel ONE路线不能正常工作

这些都是我的一些路线:

Route::get  ('/icons',     '[email protected]'); 
Route::get  ('/icons/create',   '[email protected]'); 
Route::post  ('/icons',     '[email protected]'); 
Route::get  ('/icons/{id}/edit',  '[email protected]'); 
Route::patch ('/icons/{id}',   '[email protected]'); 
Route::delete ('/icons',     '[email protected]'); 

正如你所看到的,这些都是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我:

​​

所有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" 
+0

你可以分享@edit方法吗?和你的完整路线文件,我会说有相同的命名帖子或放置方法冲突 –

+0

@AnarBayramov我编辑与代码的问题和[这里是路线](https://pastebin.com/h1ktspuD) –

+0

你可以显示apache访问日志? –

回答

2

icons是Apache中的标准别名。默认情况下,Laravel的.htaccess已设置,以便Laravel仅处理对不存在的文件或目录的请求。查看路线:

Route::get  ('/icons',     '[email protected]'); 
Route::get  ('/icons/create',   '[email protected]'); 
Route::post  ('/icons',     '[email protected]'); 

就Apache而言,这些看起来都像对文件的请求。这些文件不存在,所以Laravel处理请求,并且它们都工作正常。这里

Route::get  ('/icons/{id}/edit',  '[email protected]'); 

icons/后尾随斜线意味着阿帕奇认为它是一个目录,和Apache 知道一个目录中称为图标 - 它的标准图标的别名。所以Laravel不处理这个请求,而是留给Apache。但是在Apache的图标目录中没有这样的名为“44”(或任何ID被传递)的目录,所以Apache会抛出一个404.

解决方案是删除Apache的icons别名(假设你不需要它),as described for eg here,或为此路线使用不同的名称,例如my-icons等。

+0

谢谢!你拯救了我的一天。我现在只是重新命名了这条路线并开始工作。 –