作成日:2024-03-19, 更新日:2024-03-21
やりたいこと
既存サイトがある…特定のフォルダへのアクセスをlaravelで対応・表示させたい
.htaccessでの対応は避けたいんだけど…私では解決できそうになかった(※「laravel 既存サイトにlaravelを追加」)
既存サイトの構成
- /public
- /public/css
- /public/js
- /public/index.php
- /public/about.html
laravel追加後の構成
「public/index.php」がすでにいるのでlaravelで使えない…という問題がある
- /public
- /public/css
- /public/js
- /public/index.php
- /public/about.html
- /public/laravel.php← 追加
- /public/.htaccess← 追加
- 他、laravelのファイルたち
各設定
既存サイトで「/public/index.php」が使われているので特定のアクセスに対してlaravelのindex.phpを読むようにしたい
/public/laravel.php← 追加
- laravelインストール時の「/public/index.php」をリネームして「/public/laravel.php」にする
/public/.htaccess← 追加
幸いなことに既存サイトに.htaccessがいなかったのでそのままいけそう
- laravelインストール時の「/public/.htaccess」を修正
laravelインストール時の「/public/.htaccess」を修正
「http://exampe.com/contents1」配下、「http://exampe.com/contents2」配下のアクセスをすべて「/public/laravel.php」を読むように設定を追記
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /
# ==============================================
# Laravel設定
RewriteRule ^contents1(/.*)?$ laravel.php$1 [L,QSA]
RewriteRule ^contents2(/.*)?$ laravel.php$1 [L,QSA]
# ==============================================
# Authorizationヘッダー
# ▼contents1、contents2で条件を絞る。元からある「.htaccess」の設定や他のフレームワークとの競合を避ける
RewriteCond %{REQUEST_URI} ^/contents1 [OR]
RewriteCond %{REQUEST_URI} ^/contents2 [OR]
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# # ▼contents1、contents2以外の設定。必要に応じて設定
# RewriteCond %{REQUEST_URI} !^/contents1
# RewriteCond %{REQUEST_URI} !^/contents2
# RewriteCond %{HTTP:Authorization} .
# RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# ==============================================
# Trailing Slashリダイレクト
# ▼contents1、contents2で条件を絞る。元からある「.htaccess」の設定や他のフレームワークとの競合を避ける…必要はないと思うけど念のため
RewriteCond %{REQUEST_URI} ^/contents1 [OR]
RewriteCond %{REQUEST_URI} ^/contents2 [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# # ▼contents1、contents2以外の設定。必要に応じて設定
# RewriteCond %{REQUEST_URI} !^/contents1
# RewriteCond %{REQUEST_URI} !^/contents2
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_URI} (.+)/$
# RewriteRule ^ %1 [L,R=301]
# ==============================================
# laravelインストール時にあった「.htaccess」の記述
# # Handle Authorization Header
# RewriteCond %{HTTP:Authorization} .
# RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# # Redirect Trailing Slashes If Not A Folder...
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_URI} (.+)/$
# RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^ index.php [L]
</IfModule>
※「RewriteRule ^ index.php [L]」はひとまず不要。別のフレームワークでの設定で使われているなら必要
「public」じゃなく「public_html」の場合
現状、「public」で問題ないんだけど、いずれ「public_html」や「htdocs」など、フォルダの構成が変更になるかもしれないので…メモだけ
※実際に試していないので動作するかは不明
- public/index.php ← laravelインストール時のファイル。上記の流れでいくならpublic/laravel.php
- app/Providers/AppServiceProvider.php
- vite.config.js
public/index.php ← laravelインストール時のファイル。上記の流れでいくならpublic/laravel.php
public/index.phpをpublic_html/index.phpにするだけなら変更不要だけど、階層がかわるなら修正が必要
▼複数ある下記PATHを正しいPATHに書き換える
__DIR__.'/../vendor/autoload.php'
app/Providers/AppServiceProvider.php
register()に「path.public」の設定追加
public function register(): void
{
$this->app->bind('path.public', function () {
return base_path() . '/public_html';
});
}
vite.config.js
publicDirectoryを追加
plugins: [
laravel({
publicDirectory: './public_html',
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),