Laravel 5 URLの末尾/( スラッシュ )でリダイレクトさせない設定
ブラウザのクライアントアプリがFlash(.swf)で動いているアプリを Laravelで書き換え中。
Flashのアプリは、末尾にスラッシュがついたリクエストをサーバーに送ってくる(HTTPのPOST) 。
Laravel5は、末尾にスラッシュがあると、リダイレクトさせてしまう上に、リダイレクトのアクセスは、HTTPのGETなので、うまく動かない。
Flashのアプリは書き換えずにサーバー側だけをZendからLaravelに移行できるか試したいので、
末尾にスラッシュがあってもリダイレクトされないようにしたい。
http://test1.localhost.jp/api/Group/getList/
↑のようなURLで動くようにしたい。
laravelでトレイリングスラッシュを有効にする方法 - Qiita
末尾のスラッシュは、トレイリング・スラッシュと呼ぶらしい。初めて知った。
↑のページの修正方法を試したけど、動かなかった。
htaccessのオプション?一覧
mod_rewriteまとめ(3)mod_rewriteで使えるフラグ
設定方法
RewriteRule ^(.*)/$ /$1 [L,R=301]
という行の
[L,R=301]
を消したら思ったように動いた。
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
修正後の.htaccess
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 # modified # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
メモ
途中で、
RewriteRule ^(.*)/$ /$1 [N]
のように[N] オプションを付けたら、無限ループに入ったっぽくて、
apacheがCPU100%状態になった。
[N] オプションは、Rewriteのルールを上からやり直すオプションらしい。
[L] を付けなければ、後続のルールも適用されるっぽい。