前回書いたこれの続き。シンボリックリンクのやり方の応用みたいな
前回はお問い合わせページ「だけ」をLaravelで組み込むので、シンボリックリンク貼るだけでサクッと組み込めました。
が、今回はそれに加え管理画面の実装も必要となりました。当然これもLaravelでの開発です。
普通に考えれば以下のようにすればできますが・・・
example.com/ -> TOP(HTML) /var/www/html/index.html
example.com/contact/ -> お問い合わせページ(Laravel) /var/www/program/resources/views/contact/index.blade.php
example.com/contact/admin -> 管理画面(Laravel) /var/www/program/resources/views/admin/index.blade.php
お問い合わせの下に管理画面があるのは違うでしょ、って話。
名前を sys とかにして、example.com/sys/contact
とか
example.com/sys/admin
にすればいいんじゃないのって感じなんですが、却下されました。
管理画面のURLはexample.com/admin
でなければいけないということです。
ので、これを実現します。
実装
シンボリックリンク
adminに対してもシンボリックリンクを貼ります。
ln -s /var/www/program/public /var/www/html/contact
ln -s /var/www/program/public /var/www/html/admin
ルーティング
routes/web.php
if(strpos(\Request::root(),'contact')){
// Controllerは app/Http/Controllers/ContactsController.php を読みこみます。
Route::get('/', 'ContactsController@index')->name('index'); // example.com/contact/
Route::get('/confirm', function () { return redirect('/'); }); // 直リン防止
Route::post('/confirm', 'ContactsController@confirm')->name('confirm'); // example.com/contact/confirm
Route::get('/thanks', function () { return redirect('/'); }); // 直リン防止
Route::post('/thanks', 'ContactsController@thanks')->name('thanks'); // example.com/contact/thanks
}
if(strpos(\Request::root(),'admin')){
Route::group(['namespace' => 'Admin'], function() {
// Controllerは app/Http/Controllers/Admin/AdminController.php を読みこみます。
Auth::routes(); // example.com/admin/login とかそういうAuth関連一式
Route::get('/', 'AdminController@index')->name('admin.index'); // example.com/admin/ 管理者ログイン後表示
Route::get('/logout', 'Auth\LoginController@logout')->name('logout'); // example.com/admin/logout
});
}
ルートURLに「contact」が含まれていたらcontactに関するページを表示、
ルートURLに「admin」が含まれていたらadminに関するページを表示するようにします。
こんなことをする理由は、\Request::root() が返す内容が http://example.com/contact などであり、
そのままでは if(\Request::root() == 'contact')
とはできないからです。