Php 为什么HTTP请求发布并放入公用文件夹的laravel和.htaccess文件中,这在本地机器上非常有效,而在实时服务器上不起作用?
我正在Laravel4.2中构建一个restful api。我在我的本地机器上开发了api,它工作得很好。但是,当我将其迁移到live server时,HTTP POST和PUT请求返回以下异常:Php 为什么HTTP请求发布并放入公用文件夹的laravel和.htaccess文件中,这在本地机器上非常有效,而在实时服务器上不起作用?,php,.htaccess,laravel,Php,.htaccess,Laravel,我正在Laravel4.2中构建一个restful api。我在我的本地机器上开发了api,它工作得很好。但是,当我将其迁移到live server时,HTTP POST和PUT请求返回以下异常: Symfony\Component\HttpKernel\Exception\NotFoundHttpException 这是我的路线文件 Route::group(['prefix' => 'api/v1'], function(){ Route::post('log
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
这是我的路线文件
Route::group(['prefix' => 'api/v1'], function(){
Route::post('login', ['as' => 'api.v1.users.login', 'uses' => 'UsersController@login']);
Route::delete('logout', ['as' => 'api.v1.users.logout', 'uses' => 'UsersController@destroy']);
Route::post('register', ['as' => 'api.v1.users.register', 'uses' => 'UsersController@register']);
Route::put('change-password', ['as' => 'api.v1.users.change.password', 'uses' => 'UsersController@update']);
Route::post('forgot-password', ['as' => 'api.v1.users.forgot.password', 'uses' => 'UsersController@forgotPassword']);
Route::get('recover/{code}', ['as' => 'api.v1.users.recover', 'uses' => 'UsersController@recover']);
});
我跑
php artisan routes
| POST api/v1/login | api.v1.users.login | UsersController@login
| DELETE api/v1/logout | api.v1.users.logout | UsersController@destroy
| POST api/v1/register | api.v1.users.register | UsersController@register
| PUT api/v1/change-password | api.v1.users.change.password | UsersController@update
| POST api/v1/forgot-password | api.v1.users.forgot.password | UsersController@forgotPassword
| GET|HEAD api/v1/recover/{code} | api.v1.users.recover | UsersController@recover
它显示了uri及其相关的控制器和方法。我想不出这个问题。我们需要为live server重新配置laravel吗?我正在使用POSTMAN作为rest客户端
此外,公用文件夹的.htaccess文件在live server中不起作用。我必须像这样写url
http://somedoman.com/index.php/api/v1/login
而不是
http://somedoman.com/api/v1/login
当.htaccess存在于公用文件夹中时,为什么它不工作?mod_重写已启用。我还将AllowOverride None更改为AllowOverride All
这是公用文件夹的.htaccess的内容
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
选项-多视图
重新启动发动机
#重定向尾部斜杠。。。
重写规则^(.*)/$/$1[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
我也遇到了类似的问题,于是我尝试了这种破解方法。这对我很有吸引力。
在过滤器中添加此代码
App::before(函数($request){
}))
别忘了我在前端使用angular,我在每个请求中都添加了这个
app.config(['$httpProvider',函数($httpProvider){
}])) htaccess文件的内容将有助于提供任何相关和有意义的帮助。根据你在这里给出的,任何人都能做的最好的事情就是给你一般化的指针,并对这个问题进行疯狂的猜测。请在您的问题中编辑一些相关的详细信息--异常的完全限定类名与问题不太相关。请阅读此内容,并尝试修改您的问题以帮助我们帮助您:@Chris抱歉。我修改了我的问题。希望你能帮助我。也许是
RewriteRule^index.php[P]
而不是RewriteRule^index.php[L]
@AnthonyGarcia谢谢你,但它没有改变任何事情。
header('Access-Control-Allow-Origin: http://www.example.com');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization');
if (Request::getMethod() == "OPTIONS") {
$headers = array(
'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers'=> 'X-Requested-With, content-type',);
return Response::make('', 200, $headers);
}
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$httpProvider.interceptors.push('myHttpInterceptor');