簡體   English   中英

Laravel 4量產:Ajax調用中的403禁止錯誤以進行更新

[英]Laravel 4 on production: 403 forbidden error on ajax call to update

我有一個laravel 4應用程序,可以在laravel進行定期保存的情況下正常運行。 “常規保存”表示我不是在使用ajax來調用URL來保存表單中的數據,而是使用laravel的URL到/ revocable / users / page / 1 / update的路由。

僅在對URL的ajax調用期間出現403禁止錯誤:/ revocable / users / page / 1 / update

這里失敗了:

$.ajax({
    type: action,
    cache: false,
    dataType: 'json',
    url: '/revocable/users/page/1/update',
    data: {
        'oSerializeArray':  [array]
    },
    beforeSend: function() {
    }
})
    .done( function( data, text, jqxhr ) {
        data.success;
        //data.iPersonsPK;
        window.location.replace(sUrlEdit);
    })
    .fail( function ( data, jqxhr ) {
        data.success;
    })
    .always( function ( data ) {
        data.success;
    })

return false;

我認為這是我的Apache httpd.conf的virtualhost設置。 出現403錯誤時,我沒有虛擬主機文件。

我試着用這個創建一個虛擬主機文件:

<Directory "/home/myultrat/public_html/secure/test/*">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny 
Allow from all
</Directory>

ErrorLog /usr/local/apache/domlogs/secure.myultratrust.com.errors

但是問題是一樣的。 我讀到它可能是跨站點腳本錯誤。 但這是在同一個域上。 所有這些代碼在使用WAMP的本地計算機上都能正常運行。 所以我認為這是一個虛擬主機配置問題。

哦,我不得不提到laravel應用程序位於子目錄中,而不是以“傳統”方式放置在子域的根目錄中。

我該如何解決這個問題?

非常感謝和祝福,維克多

更新

這樣簡單的修復。 我需要更新相對URL。

將提交給$ .ajax的URL從'/revocable/users/page/1/update'更改為'/test/revocable/users/page/1/update'解決了該問題。 @ prabhakaran8737在URL路徑不正確的情況下部分正確。 但是(就像我在他的回答的評論中提到的那樣),一直以來,我都認為URL是相對於發出請求的位置(即'/test/revocable/users/page/1/update' ),但是$ .ajax將URL調用視為基於其根域。 因此,我需要將URL修改為基於根目錄並相應地進行更改(即'/test/revocable/users/page/1/update' )。

我也嘗試使用絕對URL,但這似乎也不起作用。 因此,從根來的相對URL是答案。 並且相對URL必須以開始/正斜杠。 我嘗試了./並且也嘗試了不使用正斜杠的方式,但是這些都不起作用。

[編輯]只是一個注釋,我以為我在Prabhakaran回應之前就發布了此內容。 但這仍使我想讓某人或我自己進一步解決該問題。 我祈禱這很快就解決。 :)

這不是答案,但可能有助於得出答案。 :)

我已經有了一定的了解。 當我單擊“保存”按鈕時,該表單將數據保存在POST請求中。 該POST URL為http://secure.myultratrust.com/test/revocable/users/page/3/update

Laravel路由有效,並保存數據。

但是,當我通過“保存繼續”按鈕保存數據時,該按鈕執行$.ajax調用,但仍對同一POST URL Apache突然發現找不到404 error頁面。

相同的文件和Laravel應用程序適用於使用2.4的WAMP。

我在WAMP本地服務器中有這個:

<VirtualHost *:80>
    ServerName l4-confide
    ServerAlias l4-confide
    DocumentRoot "C:\wamp\www\test\trunk\php\l4-confide\public"
    SetEnv APPLICATION_ENV "development"
    <Directory "C:\wamp\www\test\trunk\php\l4-confide\public">
        DirectoryIndex index.php
        Options All Includes Indexes
        Options Indexes FollowSymLinks MultiViews
        Require all granted
    </Directory>
</VirtualHost>

但是我的生產服務器使用Apache 2.2。 等同於“要求全部授予”? 我不確定這是否可以解決問題。 我想知道為什么Apache抱怨僅在$.ajax調用中找不到404錯誤,而不是在以“常規”方式(即通過HTML進行POST)提交(即保存)表單時卻抱怨不到。

我猜問題出在網址:“ / revocable / users / page / 1 / update”,

假設如果您在頁面http:// localhost / something /中並使用相關的URL revocable/users/page/1/update那么ajax請求可能是http:// localhost / something / revocable / users / page / 1 / update ,如果您在http:// localhost / another /頁面中,則請求將

http:// localhost / another / revocable / users / page / 1 / update

因此,您將找不到正確的頁面來處理請求。

var csrf = $('meta[name=_token]').attr('content');

        $.ajaxSetup({
            beforeSend: function(request) {
                return request.setRequestHeader('X-CSRF-Token', csrf);
            }
        });

將var csrf設置為您的csrf變量。 我的網站將其全局存儲在meta中

與Apache 2.2中的“要求所有被授予的權限”等效:

訂單允許,全部拒絕

檢查Apache升級: http : //httpd.apache.org/docs/2.4/upgrading.html

另外,.htaccess文件也有一些區別(2.2 vs 2.4),但是我不確定該問題是否與此有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM