草庐IT

php - 对SEO URL的POST请求被禁止

coder 2024-04-10 原文

我有一个基本的mvc系统,它向url发送post数据,比如
管理/产品/添加/
但这给了我一个错误
被禁止的
您没有访问权限
/管理/产品/添加/在此服务器上。
此外,在尝试
使用错误文档处理请求。
重写规则很简单

RewriteRule ^(.*)/$ index.php?uri=$1

上次我在服务器上看到将文件/目录权限更改为755似乎解决了这个问题,但这次没有。我从来没有真正理解错误的原因,所以希望有人可以提供更多的信息?

最佳答案

有两个错误:
您没有在此服务器上访问/admin/product/add/的权限。
此外,尝试使用errordocument处理请求时遇到404 not found错误。
第二个肯定是同一个错误的结果。您的apache配置中可能有一些东西可以从默认http服务器处理中删除404错误并将其推送到php应用程序中,如果这个php应用程序正常工作,我们会得到一个不错的404,但是……
第一个命令告诉您php应用程序根本没有运行。
所以。第一个错误告诉我们,apache确实试图直接访问服务器上的目录/path/to/documentroot/admin/product/add/,并生成该目录的列表(只有在apache被授权这样做的情况下,目录内容的列表才能完成)。当然,这不是服务器上的真正目录。它是应用程序中的虚拟路径。所以apache最后得到一个404(这会导致错误2)。
应用程序处理虚拟路径,而apache不管理它。rewriterule作业是在apache尝试提供请求的路径之前捕获该路径,并将其作为查询字符串参数提供给一个php文件(index.php)。
所以…未应用此重写规则。有许多事情可以阻止这一规则的适用:
mod_rewrite not activated:模块是否存在并启用(RewriteEngine on)?
语法错误:mod rewrite语法很难读取,有时非常复杂。但在这里似乎很简单。
rewriterule结果文件可能不是apache的有效目标。如果documentroot中不存在index.php文件,或者apache用户不可读,那么apache将失败。警告:让apache用户可以读取文件意味着对该文件具有读取权限,同时对apache用户的所有父目录具有执行权限。这就是经典的解决方案解决问题的地方。
规则必须在有效的配置文件中。这个规则是在一个apache配置文件中的一个位置或目录部分中吗?或者在全局范围内——这可能会改变重写规则语法。还是在.htaccess文件中?如果是.htacces,那么apache是否读取.htacces文件并在其中允许mod rewrite指令(chmod)。难道没有其他.htaccess文件优先吗?
所以要解决这个问题:
如果您的apache版本大于2.2.16,那么可以用FallbackRessource /index.php替换rewriterule,以检查这不是mod rewrite问题造成的。
尝试直接请求chown,以便至少对此文件的直接请求起作用
尝试直接访问documentroot上的有效ressource(一个txt文件、一个图像、一些不应由重写处理但直接提供的内容)
检查您的任何虚拟路径是否可以映射真实的物理路径,apache并不是试图为物理路径提供服务(比如当您编写AllowOverride None时),而是真正地将路径推送到index.php
检查apache错误日志。
使用RewriteCond %{REQUEST_FILENAME}-dindex.php重写调试模式
收集事实、设置和测试,然后将其推到so或Servfault
所以问题很简单:php应用程序没有收到请求。但在这种状态下有很多方法可以结束。信息本身并不重要。找到错误的唯一方法是检查所有参数(或者有多年的错误修复经验,为灯错误开发一个认知前直觉器官——通常是胡子——像管理员一样)。我们帮助你的唯一方法就是在一大串配置细节中找到奇怪的事实,这就是为什么好的问题包含了很多信息,即使所有这些信息对你来说都是“经典”的。
编辑
要澄清问题,您应该编辑您的答案,使用chrome developpers工具或firebug等工具跟踪RewriteLog请求(将网络跟踪保持在记录模式以捕获多个帖子),或者尝试使用实时http头回复来重播帖子。你应该试着把有问题的帖子隔离出来,并给我们详细的信息。调试并不神奇。
现在我知道一个神奇的随机失败。这是空的get url错误。可能是(或不是)。如果有一个空的get url隐藏在某个地方(例如css中的RewriteLogLevelPOST,或headers中的空链接)。因为这些隐藏的post在http中被定义为“重放启动源页面的请求,有些浏览器甚至重放给你页面的post(如果他们找到了)。这可能会导致隐藏的柱子断裂。
也可能是邮件没有发送到正确的服务器。很难说。因此,请从你的评论中收集信息,添加更多的网络分析,并编辑现在确实包含的事实不足的问题。

关于php - 对SEO URL的POST请求被禁止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808954/

有关php - 对SEO URL的POST请求被禁止的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  3. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  4. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  5. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  6. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  7. ruby - HTTP 请求中的用户代理,Ruby - 2

    我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)

  8. ruby-on-rails - 获取并发布相同匹配项的请求 - 2

    在我的路线文件中我有:match'graphs/(:id(/:action))'=>'graphs#(:action)'如果是GET请求(工作)或POST请求(不工作),我想匹配它我知道我可以使用以下方法在资源中声明POST请求:post'/'=>:show,:on=>:member但是我怎样才能为比赛做到这一点呢?谢谢。 最佳答案 如果你同时想要POST和GETmatch'graphs/(:id(/:action))'=>'graphs#(:action)',:via=>[:get,:post]编辑默认值可以设置如下match'g

  9. ruby-on-rails - 如何通过 POST 发送多个相同的键/参数? - 2

    如果我必须在一个HTTP请求中发送一堆post参数,所有这些参数都具有相同的名称,我该如何构建要发布的data对象?想象一个带有一些复选框的表单,它们都具有相同的name属性但具有不同的值(如果它们被选中):我想用ruby​​构建它(但它需要根据在表单上选择的内容动态创建):data={"color"=>"red","color"=>"green","color"=>"blue"}然后将数据发送到某个URL:Net::HTTP.post_form(url,data)我无法控制接收端,所以我必须发送它期望接收的参数。怎么办? 最佳答案

  10. ruby-on-rails - 如何在 ActionController::TestCase 请求中设置内容类型 - 2

    我试图像这样在我的测试用例中执行获取:request.env['CONTENT_TYPE']='application/json'get:index,:application_name=>"Heka"虽然,它失败了:ActionView::MissingTemplate:Missingtemplatealarm_events/indexwith{:handlers=>[:builder,:haml,:erb,:rjs,:rhtml,:rxml],:locale=>[:en,:en],:formats=>[:html]尽管在我的Controller中我有:respond_to:html,

随机推荐