Php 为什么HTTP请求发布并放入公用文件夹的laravel和.htaccess文件中,这在本地机器上非常有效,而在实时服务器上不起作用?

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

我正在Laravel4.2中构建一个restful api。我在我的本地机器上开发了api,它工作得很好。但是,当我将其迁移到live server时,HTTP POST和PUT请求返回以下异常:

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');