[英]Some of my Laravel routes (PUT and DELETE) doesn't work on a shared hosting
I've developed a web application with Laravel. 我已经使用Laravel开发了一个Web应用程序。 Everything is alright on my local developement environment and on a dedicated server. 在我的本地开发环境和专用服务器上,一切都很好。 But when I switch to a shared hosting (OVH) Laravel returns me an MethodNotAllowedHttpException
when I try to update or delete a resource. 但是,当我切换到共享主机(OVH)时,当我尝试更新或删除资源时,Laravel向我返回了MethodNotAllowedHttpException
。 HTTP GET
and POST
requests works great. HTTP GET
和POST
请求效果很好。
I do not know if my host allows requests other than GET
and POST
. 我不知道我的主机是否允许GET
和POST
以外的请求。 But in fact the question is not there (I think): because Laravel uses POST
request to "simulate" PUT
and DELETE
request (with the input of type hidden "_method"). 但实际上问题不存在(我认为):因为Laravel使用POST
请求来“模拟” PUT
和DELETE
请求(输入类型为“ _method”隐藏式)。 So I do not think it is the problem. 因此,我认为这不是问题。
I need your help to find where is the problem. 我需要您的帮助以查找问题所在。 I do not understand why my routes works on a developement environement and (certain of my routes) doesn't works on my shared hosting. 我不明白为什么我的路线无法在开发环境中使用,而(某些路线)为什么不适用于我的共享主机。
It doesn't make sense! 没道理!
Do you need additional informations (php.ini maybe?) 您是否需要其他信息(也许是php.ini?)
My routes.php file (these routes are OK with WAMP or on my dedicated server): 我的routes.php文件(这些路由在WAMP或我的专用服务器上都可以):
// Backend
Route::group(['prefix' => 'admin', 'namespace' => 'Controllers\Backend', 'before' => 'auth.wordpress'], function() {
Route::get('/', 'DashboardController@index');
Route::get('products/{status}', ['as' => 'admin.products.index.status', 'uses' => 'ProductsController@index'])->where('status', 'publish|draft|featured');
Route::post('products/index', ['as' => 'admin.products.filter', 'uses' => 'ProductsController@index']);
Route::resource('products', 'ProductsController');
Route::post('categories/index', ['as' => 'admin.categories.filter', 'uses' => 'CategoriesController@index']);
Route::resource('categories', 'CategoriesController');
Route::post('manufacturers/index', ['as' => 'admin.manufacturers.filter', 'uses' => 'ManufacturersController@index']);
Route::resource('manufacturers', 'ManufacturersController');
Route::post('attributes/index', ['as' => 'admin.attributes.filter', 'uses' => 'AttributesController@index']);
Route::resource('attributes', 'AttributesController');
Route::resource('upload', 'UploadController', ['only' => array('store', 'destroy')]);
Route::post('upload/{from}', ['as' => 'admin.upload.store.from', 'uses' => 'UploadController@store']);
});
Routes generated by php artisan
routes command: 由生成的路由 php artisan
routes命令:
+--------+---------------------------------------------------+-------------------------------------+-----------------------------------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+---------------------------------------------------+-------------------------------------+-----------------------------------------------------------+----------------+---------------+
| | GET|HEAD / | | Closure | | |
| | GET|HEAD products/featured | frontend.products.featured | Controllers\Frontend\ProductsController@featured | | |
| | GET|HEAD products/sidebar/{slugCategory?} | frontend.products.sidebar | Controllers\Frontend\ProductsController@sidebar | | |
| | GET|HEAD products/last | frontend.products.last | Controllers\Frontend\ProductsController@last | | |
| | POST products/search/{page?} | frontend.products.search | Controllers\Frontend\ProductsController@search | | |
| | GET|HEAD products/show/{slug} | frontend.products.show | Controllers\Frontend\ProductsController@show | | |
| | GET|HEAD products/show/{slug}/meta | frontend.products.show.meta | Controllers\Frontend\ProductsController@showMeta | | |
| | GET|POST|HEAD products/{category?}/{page?} | frontend.products.show | Controllers\Frontend\ProductsController@index | | |
| | GET|HEAD categories/show/{category}/meta | frontend.categories.meta | Controllers\Frontend\ProductsController@categoryMeta | | |
| | GET|HEAD manufacturers/listHomepage | frontend.manufacturers.listHomepage | Controllers\Frontend\ManufacturersController@listHomepage | | |
| | GET|HEAD manufacturers | frontend.manufacturers.index | Controllers\Frontend\ManufacturersController@index | | |
| | GET|HEAD manufacturers/{slug} | frontend.manufacturers.show | Controllers\Frontend\ManufacturersController@show | | |
| | GET|HEAD manufacturers/{slug}/meta | frontend.manufacturers.show.meta | Controllers\Frontend\ManufacturersController@showMeta | | |
| | GET|HEAD admin | | Controllers\Backend\DashboardController@index | auth.wordpress | |
| | GET|HEAD admin/products/{status} | admin.products.index.status | Controllers\Backend\ProductsController@index | auth.wordpress | |
| | POST admin/products/index | admin.products.filter | Controllers\Backend\ProductsController@index | auth.wordpress | |
| | GET|HEAD admin/products | admin.products.index | Controllers\Backend\ProductsController@index | auth.wordpress | |
| | GET|HEAD admin/products/create | admin.products.create | Controllers\Backend\ProductsController@create | auth.wordpress | |
| | POST admin/products | admin.products.store | Controllers\Backend\ProductsController@store | auth.wordpress | |
| | GET|HEAD admin/products/{products} | admin.products.show | Controllers\Backend\ProductsController@show | auth.wordpress | |
| | GET|HEAD admin/products/{products}/edit | admin.products.edit | Controllers\Backend\ProductsController@edit | auth.wordpress | |
| | PUT admin/products/{products} | admin.products.update | Controllers\Backend\ProductsController@update | auth.wordpress | |
| | PATCH admin/products/{products} | | Controllers\Backend\ProductsController@update | auth.wordpress | |
| | DELETE admin/products/{products} | admin.products.destroy | Controllers\Backend\ProductsController@destroy | auth.wordpress | |
| | POST admin/categories/index | admin.categories.filter | Controllers\Backend\CategoriesController@index | auth.wordpress | |
| | GET|HEAD admin/categories | admin.categories.index | Controllers\Backend\CategoriesController@index | auth.wordpress | |
| | GET|HEAD admin/categories/create | admin.categories.create | Controllers\Backend\CategoriesController@create | auth.wordpress | |
| | POST admin/categories | admin.categories.store | Controllers\Backend\CategoriesController@store | auth.wordpress | |
| | GET|HEAD admin/categories/{categories} | admin.categories.show | Controllers\Backend\CategoriesController@show | auth.wordpress | |
| | GET|HEAD admin/categories/{categories}/edit | admin.categories.edit | Controllers\Backend\CategoriesController@edit | auth.wordpress | |
| | PUT admin/categories/{categories} | admin.categories.update | Controllers\Backend\CategoriesController@update | auth.wordpress | |
| | PATCH admin/categories/{categories} | | Controllers\Backend\CategoriesController@update | auth.wordpress | |
| | DELETE admin/categories/{categories} | admin.categories.destroy | Controllers\Backend\CategoriesController@destroy | auth.wordpress | |
| | POST admin/manufacturers/index | admin.manufacturers.filter | Controllers\Backend\ManufacturersController@index | auth.wordpress | |
| | GET|HEAD admin/manufacturers | admin.manufacturers.index | Controllers\Backend\ManufacturersController@index | auth.wordpress | |
| | GET|HEAD admin/manufacturers/create | admin.manufacturers.create | Controllers\Backend\ManufacturersController@create | auth.wordpress | |
| | POST admin/manufacturers | admin.manufacturers.store | Controllers\Backend\ManufacturersController@store | auth.wordpress | |
| | GET|HEAD admin/manufacturers/{manufacturers} | admin.manufacturers.show | Controllers\Backend\ManufacturersController@show | auth.wordpress | |
| | GET|HEAD admin/manufacturers/{manufacturers}/edit | admin.manufacturers.edit | Controllers\Backend\ManufacturersController@edit | auth.wordpress | |
| | PUT admin/manufacturers/{manufacturers} | admin.manufacturers.update | Controllers\Backend\ManufacturersController@update | auth.wordpress | |
| | PATCH admin/manufacturers/{manufacturers} | | Controllers\Backend\ManufacturersController@update | auth.wordpress | |
| | DELETE admin/manufacturers/{manufacturers} | admin.manufacturers.destroy | Controllers\Backend\ManufacturersController@destroy | auth.wordpress | |
| | POST admin/attributes/index | admin.attributes.filter | Controllers\Backend\AttributesController@index | auth.wordpress | |
| | GET|HEAD admin/attributes | admin.attributes.index | Controllers\Backend\AttributesController@index | auth.wordpress | |
| | GET|HEAD admin/attributes/create | admin.attributes.create | Controllers\Backend\AttributesController@create | auth.wordpress | |
| | POST admin/attributes | admin.attributes.store | Controllers\Backend\AttributesController@store | auth.wordpress | |
| | GET|HEAD admin/attributes/{attributes} | admin.attributes.show | Controllers\Backend\AttributesController@show | auth.wordpress | |
| | GET|HEAD admin/attributes/{attributes}/edit | admin.attributes.edit | Controllers\Backend\AttributesController@edit | auth.wordpress | |
| | PUT admin/attributes/{attributes} | admin.attributes.update | Controllers\Backend\AttributesController@update | auth.wordpress | |
| | PATCH admin/attributes/{attributes} | | Controllers\Backend\AttributesController@update | auth.wordpress | |
| | DELETE admin/attributes/{attributes} | admin.attributes.destroy | Controllers\Backend\AttributesController@destroy | auth.wordpress | |
| | POST admin/upload | admin.upload.store | Controllers\Backend\UploadController@store | auth.wordpress | |
| | DELETE admin/upload/{upload} | admin.upload.destroy | Controllers\Backend\UploadController@destroy | auth.wordpress | |
| | POST admin/upload/{from} | admin.upload.store.from | Controllers\Backend\UploadController@store | auth.wordpress | |
+--------+---------------------------------------------------+-------------------------------------+-----------------------------------------------------------+----------------+---------------+
phpinfo(): https://www.dropbox.com/s/mj7d6c6ptdj9i4u/phpinfo_ovh.png?dl=0 phpinfo(): https ://www.dropbox.com/s/mj7d6c6ptdj9i4u/phpinfo_ovh.png?dl = 0
Stacktrace of the error: 错误的堆栈跟踪:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException thrown with message ""
Stacktrace:
#13 Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:210
#12 Illuminate\Routing\RouteCollection:methodNotAllowed in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:197
#11 Illuminate\Routing\RouteCollection:getOtherMethodsRoute in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:145
#10 Illuminate\Routing\RouteCollection:match in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1049
#9 Illuminate\Routing\Router:findRoute in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1017
#8 Illuminate\Routing\Router:dispatchToRoute in /home/guicara/vendor/laravel/framework/src/Illuminate/Routing/Router.php:996
#7 Illuminate\Routing\Router:dispatch in /home/guicara/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:775
#6 Illuminate\Foundation\Application:dispatch in /home/guicara/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:745
#5 Illuminate\Foundation\Application:handle in /home/guicara/vendor/laravel/framework/src/Illuminate/Session/Middleware.php:72
#4 Illuminate\Session\Middleware:handle in /home/guicara/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php:47
#3 Illuminate\Cookie\Queue:handle in /home/guicara/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php:51
#2 Illuminate\Cookie\Guard:handle in /home/guicara/vendor/stack/builder/src/Stack/StackedHttpKernel.php:23
#1 Stack\StackedHttpKernel:handle in /home/guicara/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:641
#0 Illuminate\Foundation\Application:run in /home/guicara/www/public/index.php:61
Firebug debug on the shared hosting (OVH): 在共享主机(OVH)上进行Firebug调试:
Firebug debug on WAMP (local)... for the same request (updating a product): 针对相同请求(更新产品)在WAMP(本地)上进行Firebug调试:
I think it is quite clear what is going on. 我认为这很清楚。 You set the routes for POST and GET , but expect DELETE and PUT to do the routing magically. 您为POST和GET设置了路由,但是希望DELETE和PUT神奇地进行路由。
Route::delete('attributes/destroy/{id}','AttributesController@destroy');
Route::put('products/{id}', 'ProductsController@update');
The best way is to route everything implicitly. 最好的方法是隐式路由所有内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.