質問: 環境はLaravel5.3, PHP5.6.22, CentOS 6.8です。 今回既存サイトの一部分を改修するとのことで、以下の方法でシンボリックリンクを貼り、Laravelを構築しました。 http://qiita.com/qwe001/items/3fcd21381b0547001557 今回はPC版とSP版が必要なので次のようにルーティングの設定をしました。 ``` Route::get('/', 'ItemsController@index')->name('index'); Route::get('/hoge', 'ItemsController@hoge')->name('hoge'); Route::group(['prefix' => 'sp', 'namespace' => 'Sp'], function() { Route::get('/', 'ItemsController@index')->name('index'); Route::get('/hoge', 'ItemsController@hoge')->name('hoge'); }); ``` URLとしては次のようなイメージです。 example.com/ -> TOP PC(HTML) example.com/sp/ -> TOP SP(HTML) example.com/items/ -> Laravel PC 親ページ(PHP) example.com/items/hoge -> Laravel PC 子ページ(PHP) example.com/items/sp -> Laravel SP 親ページ(PHP) example.com/items/sp/hoge -> Laravel PC 子ページ(PHP) このうち、example.com/items/spのみ、アクセスするとexample.com/sp/にリダイレクトしてしまいます。 そこで以下のようにルーティングを変更してみましたが、結果は変わらず。 ``` Route::get('/sp', 'Sp\ItemsController@index')->name('index'); Route::get('sp', 'Sp\ItemsController@index')->name('index'); //Route::group(['prefix' => 'sp', 'namespace' => 'Sp'], function() { // Route::get('/', 'ItemsController@index')->name('index'); // Route::get('/hoge', 'ItemsController@hoge')->name('hoge'); //}); ``` 次のようにしてみると、Viewは表示されますが、やはり/items/spのみリダイレクトします。 ``` Route::get('/mobile', 'Sp\ItemsController@index')->name('index'); Route::get('/test', 'Sp\ItemsController@index')->name('index'); Route::get('/sp', 'Sp\ItemsController@index')->name('index'); //Route::group(['prefix' => 'sp', 'namespace' => 'Sp'], function() { // Route::get('/', 'ItemsController@index')->name('index'); // Route::get('/hoge', 'ItemsController@hoge')->name('hoge'); //}); ``` さらに/items/sp/indexのようにしてみると、これは表示されます。 ``` Route::group(['prefix' => 'sp', 'namespace' => 'Sp'], function() { Route::get('/', 'ItemsController@index')->name('index'); Route::get('/index', 'ItemsController@index')->name('index'); Route::get('/hoge', 'ItemsController@hoge')->name('hoge'); }); ``` でも表示させたいURLはあくまで/items/spです。 .htaccessにUA判別してリダイレクトするみたいな記述はしておりません。 Apacheでもspにエイリアスがかかっていたりもしません。 親階層のHTMLディレクトリには.htaccessは存在しません。 なぜ勝手に意図しないリダイレクトが発生するのでしょうか。 原因が全くわからず、完全にお手上げ状態です。 こちらの現象に遭遇した方がいらっしゃいましたら、ご助言頂けますでしょうか。。。よろしくお願いいたします。
回答: 仮想環境をクローンせず、ゼロから構築し直してとりあえず解決はしました。 また、こちら一向に原因は不明ですが、ある程度原因と思われる候補は絞り込めました。 根本解決ではなくて申し訳ないですが、同様の現象に今後遭遇した人たちに何らかの手助けになれば幸いです。 1LaravelCollectiveのHTMLが原因? 通常のディレクトリ構成なら何も考慮する必要はありませんが、シンボリックリンクを貼るという特殊な操作をする関係上、 CSSファイルをpublic_path()から明示的に取得する必要があります。 そこで以下のような指定をしましたが、これが原因で/{シンボリックリンク名}/spの文字列があればpublicの中身を読みに行く、といった挙動になったのかもしれません。 {{ Html::style('sp/css/style.css') }} 2publicの中にspというディレクトリを作成したことが原因? 上記の記述を削除した上でviewにspというディレクトリを作成して、アクセスしたら閲覧ができることを確認。 その後、public直下にspディレクトリを作成すると問題となっているリダイレクト現象が発生しました。 その後にspディレクトリを削除してもリダイレクトは解除されませんでした。php artisan view:clear しても変化なし。 それで0から構築し直しましたが、その環境で同一操作をしたところ再現しました。そこで再構築してからディレクトリ名をsp以外のもので作成したところ、 items/spのURLでindexページが表示され、CSSも正しく読み込まれるようになりました。