【问题标题】:Zend 1.12 Rest PUT method not allowedZend 1.12 不允许使用 Rest PUT 方法
【发布时间】:2012-10-16 23:38:53
【问题描述】:

自从我迁移到 AWS 并更新到 PHP 5.4 和 Zend 1.12 后,我遇到了 PUT 和 DELETE 方法的问题。

一个简单的例子:

/** Zend 1.12 **/

/** 引导/路由 **/

$front = \Zend_Controller_Front::getInstance();
$front->setParam('bootstrap',$this);
//REST API
$router = $front->getRouter();
$restRoute = new Zend_Rest_Route($front, array(), array(
    'default' => array('rest'),
));
$router->addRoute('rest', $restRoute);

/** 休息控制器 **/

//module : default 

class RestController extends  \Zend_Rest_Controller
public function init(){
    parent::init();
    $this->_helper->viewRenderer->setNoRender(true);
    $this->_helper->layout->disableLayout();
}
public function headAction(){}

public function indexAction()
{
    Throw new AppException(Translator::translate('index not yet implemented...'));
}
public function getAction()
{
    die('get');
}
public function putAction(){
 die('put');
}

/* 测试用例 */

curl -X GET http://XXXX/rest/MS4xMjU2LjEyNTguMTI2MS4tbW9kZWxzXGNvcmVcbW9kZWxcZXhlcmNpc2VcZXhlcmNpc2VfcXVlc3Rpb24tMTQy

结果:得到 ===> OK

curl -X PUT http://XXXX/rest/MS4xMjU2LjEyNTguMTI2MS4tbW9kZWxzXGNvcmVcbW9kZWxcZXhlcmNpc2VcZXhlcmNpc2VfcXVlc3Rpb24tMTQy

结果:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for the URL /index.php.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at XXXXX Port 80</address>
</body></html>

===> 不行

我不必使用 WebDav(或其他)Apache 插件来启用 PUT/DELETE 请求。 PHP 处理程序处理这个问题,而不是 Apache。 那么,为什么 GET 可以,而 PUT 不行呢?为什么 Apache 说的是 index.php 而不是 /rest/RestController.php?

我看到 Zend 从 1.12 开始更新了它的 Zend_Rest_Controller。现在,我要声明“headAction”函数,但我没有找到关于这一点的文档......

如果你有任何想法......

谢谢,

【问题讨论】:

标签: zend-framework zend-rest


【解决方案1】:

问题可能源于 Apache 配置。 也许您应该继续添加类似

的内容
<Directory />
    AllowOverride All
    <Limit GET HEAD POST PUT DELETE OPTIONS>
        Order Allow,Deny
        Allow from all
    </Limit>
</Directory>

到您的 apache 配置。

看看这个answer

【讨论】:

  • 我已经尝试过这个解决方案,但也没有用。在我之前的配置中,我不需要更改 Apache 配置。 选项 FollowSymLinks AllowOverride All RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L ] Order allow,deny Allow from all
  • 问题不在于采埃孚。在我的环境中,你的 sn-p 工作得很好。
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2023-03-23
  • 2015-10-31
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多