2012-02-23 13 views
5

私のバックボーンアプリケーションのバックエンドとして機能するために、ApacheのローカルホストにRESTful Webサービスを設定しようとしています。 [木2月23日午前21時46分17秒2012]にできません。[エラー] [クライアント127.0.0.1]をApacheとWindowsでBackbone.jsのRESTfulサービスを設定する

  1. はWebDAVを設定するが、ログに

    を次のエラーメッセージが出ます:私が試してみました/ clusters/19の新しいコンテンツをPUTします。 [403、#0]、referer:http://ideas.localhost/ [2012年2月23日21:46:17] [エラー] [クライアント127.0.0.1]リソースのオープン中にエラーが発生しました。 [500、#0]、リファラー:私は通常のPOSTリクエストとしてX-HTTP-Method-Override: PUTヘッダによって引き起こされる推測405 method not allowed error(何かの原因Backbone.emulateHTTPを使用http://ideas.localhost/

I」が正常に動作しています私はまた、URLルーティングを処理するために、SLIMフレームワークを使用しています。Windows 7の上でApache 2.2.21とPHP 5.3を実行して、以下の私の.htaccessファイルである。

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

と仮想ホストの設定

012メートル
<VirtualHost *:80> 
    DocumentRoot "G:/sites/ideas" 
    Dav On // I also had security setting set to Allow all as it's just my localhost 
    ServerName ideas.localhost 
    ErrorLog "logs/ideas.localhost-error.log" 
    CustomLog "logs/ideas.localhost-access.log" combined 
    SetEnv APPLICATION_ENV development 
</VirtualHost> 

私は何かの年齢で働くために苦労しているので、どんな助けも大歓迎です。

+0

localhostでサブドメインを作っていますか? – Bakudan

+0

はい、 – wheresrhys

+0

の上に貼り付けた設定また、更新 - Web davを使用してサーバーの設定でうんざりしてしまったので、Backbone.emulateHTTPを有効にしたときにPHPの適切なデバッグを無視しました。 SLIMがリクエストを受け取ってから405エラーを投げていることが判明したので、ヘッダーを探すようにアプリを設定する必要があります。 – wheresrhys

答えて

4

私は賞金を開いて1時間も経たないうちに問題を解決したとは思えませんが、ちょっと待ってください。

Slimには、バックボーンによって使用されるX-HTTP-Method-Overrideヘッダーを処理する機能が組み込まれておらず、エラーメッセージはそれほど説明的ではありませんでした。あなたはそれがあると思うので、もし私が、デフォルトでこれを含めるようにSLIMのためpull requestを作成しました - request.phpの下部に以下とバックボーンにemulateHTTPモードを使用して追加すること

protected function checkForHttpMethodOverride() { 
    if (isset($this->post[self::METHOD_OVERRIDE])) { 
     $this->method = $this->post[self::METHOD_OVERRIDE]; 
     unset($this->post[self::METHOD_OVERRIDE]); 
     if ($this->isPut()) { 
      $this->put = $this->post; 
     } 
    } else if(isset($this->headers['x-method-override'])) { 
     $this->method = $this->headers['x-method-override']; 
     if ($this->isPut()) { 
      $this->put = $this->post; 
     } 
    } 
} 

PSそれを固定しましたこれをフレームワークに組み込むことをお勧めします。

関連する問題