Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生产上的Laravel4:403在ajax调用更新时禁止出现错误_Php_Jquery_Ajax_Apache_Laravel - Fatal编程技术网

Php 生产上的Laravel4:403在ajax调用更新时禁止出现错误

Php 生产上的Laravel4:403在ajax调用更新时禁止出现错误,php,jquery,ajax,apache,laravel,Php,Jquery,Ajax,Apache,Laravel,我有一个laravel 4应用程序,它可以正常使用laravel进行保存。“常规保存”意味着我不是使用ajax调用URL来保存表单中的数据,而是使用laravel到URL/revocable/users/page/1/update的路径 仅在对url进行ajax调用时,我收到一个403禁止错误: /可撤销/用户/页面/1/更新 这是失败的: 我想这是我的apachehttpd.conf的虚拟主机设置。收到403错误时,我没有virtualhost文件 我尝试使用以下内容创建virtualhos

我有一个laravel 4应用程序,它可以正常使用laravel进行保存。“常规保存”意味着我不是使用ajax调用URL来保存表单中的数据,而是使用laravel到URL/revocable/users/page/1/update的路径

仅在对url进行ajax调用时,我收到一个403禁止错误: /可撤销/用户/页面/1/更新

这是失败的:

我想这是我的apachehttpd.conf的虚拟主机设置。收到403错误时,我没有virtualhost文件

我尝试使用以下内容创建virtualhost文件:

<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

选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
ErrorLog/usr/local/apache/domlogs/secure.myultratrust.com.errors
但问题是一样的。我读到这可能是一个跨站点脚本错误。但它在同一个域上。所有这些代码都在我的本地机器上使用WAMP运行良好。所以我认为这是一个vhost配置问题

哦,我必须提到,laravel应用程序位于子目录中,而不是以“传统”的方式放置在子域的根目录中

如何解决这个问题

非常感谢和祝福[编辑] 只是一张便条,我想我是在Prabhakaran回复之前发布的。但我认为,这仍然为某人或我自己解决这个问题提供了更清晰的思路。我祈祷这件事能尽快解决。:)

这不是答案,但可能有助于得出答案。:)

我达到了某种程度的理解。当我单击“保存”按钮时,表单会在POST请求中保存数据。此帖子的URL是

Laravel路由工作,并保存数据

但是,当我通过“save an continue”按钮保存数据时,该按钮执行
$.ajax
调用,但仍然指向同一个POST URL,Apache突然抱怨找不到
404错误
页面

同样的文件和Laravel应用程序在使用2.4的我的WAMP上工作

我的WAMP本地服务器中有:


服务器名l4信任
服务器别名l4机密
DocumentRoot“C:\wamp\www\test\trunk\php\l4-confide\public”
SetEnv应用程序_ENV“开发”
DirectoryIndex.php
所有选项都包括索引
选项索引跟随符号链接多视图
要求所有授权

但我的生产服务器使用Apache2.2。“要求所有人都被授予”的等价物是什么?但我不确定这是否能解决问题。我想知道为什么Apache抱怨在
$.ajax
调用中没有发现404错误,而在以“常规”方式(即通过HTML发布)提交表单(即保存表单)时没有发现404错误。

我想问题出在url:'/revocable/users/page/1/update'

假设您的页面中有 使用相关的url
revocable/users/page/1/update
,那么ajax请求可能是,如果您在页面中,那么请求将是

所以你找不到合适的页面来处理请求

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升级:


另外,在.htaccess(2.2和2.4)中有一些不同之处,但我不确定这个问题是否与之相关。

Hi,感谢您的回复。顺便说一句,我从elance看到了您的个人资料消息。我将$.ajax调用中的URL更改为完整URL
http://secure.myultratrust.com/test/revocable/users/page/1/update
但问题是一样的。我甚至试过
/revocable/users/page/1/update
,但都没用。URL
/revocable/users/page/1/update
(没有完整的URL)在我的WAMP上工作,尽管我认为它是Apache。我得到了$ajax reponse 404页面未找到,这是Apache的响应。在上面的ajax调用中,您没有提到类型为
post
,请确保在表单中附加了序列化csrf。它是
PUT
,但我也将其更改为
post
。是的,附加了_标记。但它仍然不起作用。但是,为什么在进行任何更改之前,它都能在我的WAMP本地服务器上工作呢。我认为唯一改变的因素是生产服务器,404错误是Apache的错误。所以我仍然认为这是Apache的问题(产品版本为2.2)。关于URL引用,您的路径是正确的。但是URL不能是绝对路径。我试过了。(见上面我的更新)。我认为我的问题是,我认为URL应该与请求页面的位置相关,但事实并非如此。URL是相对于根域的,因此对于子域,它可以正常工作,但当应用程序位于子目录中时,URL需要包含根域之后的任何内容。因此,在我的例子中,
'/test/revocable/users/page/1/update'
是传递给$.ajax的正确URL。谢谢Jesse。我的代码中已经有了它:
$.ajaxSetup({headers:{'X-CSRF-Token':$('meta[name=“\u-Token”]')).attr('content')})我尝试了你的代码,但仍然不起作用:(我更新了我的答案。感谢您提供这些参考。Apache config和.htaccess中的所有选项都可能有点太多。现在有点晚了,但是如果您希望添加更多信息,您应该编辑您的问题。
<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>
var csrf = $('meta[name=_token]').attr('content');

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