0.環境

[CentOS]   5.6 (32bit版カーネル)
[Apache]   2.2.3
[PHP]      5.4.1
[Laravel]  4.1.23

1.問題

  • PHPのLaravelフレームワークを使っていたら、AjaxでPOSTした値がサーバ側で取得できずにはまりました。

    ①から②へ test という名前で hoge という値を送信します。

    • ① Javascript側

    • ② PHP側

    • ログ出力結果を見ると、下記のようにPOST値が取得できていません。

      [2014-07-16 12:09:36] local.DEBUG:  [] []
      

2.原因

  • Firefox の “Live HTTP headers” アドオンでURLの遷移を見たところ、下記のようにリダイレクトしていることがわかりました。(違いは末尾のスラッシュ)

    http://local.vm/test/

    ↓↓↓

    http://local.vm/test

  • ソースを grep したところ、.htaccessでリダイレクトしていました。

    • ■ ソース

      app-root/public/.htaccess

    • ■ 記述

      # Redirect Trailing Slashes...
      RewriteRule ^(.*)/$ /$1 [L,R=301]
      

3.対策

  • Laravel は trailing slash 非推奨なのか? とにかく下記のように修正。

    • [修正箇所] 上記ソース ajax-test.js (6行目)

    • [修正内容] URLの末尾のスラッシュを削除し、/test に修正。

    • ログにもPOST値(hoge)が出力されました。

      [2014-07-16 13:03:39] local.DEBUG: hoge [] []
      

参考にしたページ