経緯
表題の通りですが、 create react-app
で作成した React のプロジェクトをサブディレクトリにデプロイしたくなったのでメモ。
以前(2020年)には react-scripts
+ cross-env
環境で同じことをしましたが、今回は cross-env
なしです。
方法
サブディレクトリにデプロイするために修正する設定は2箇所 (ルーティングがない場合)。
package.json
public/.htaccess
(Apache の場合)
package.json
{
"name": "subdirectory-project",
"version": "0.1.0",
"private": true,
"homepage": "./", // これを追加
"dependencies": {
// 略
}
// 略
}
package.json
には、キー homepage
・値 ./
を追記します。これでリソースファイルを絶対パスではなく相対パスで読むようになるようです。
public/.htaccess
RewriteEngine On
RewriteBase /SUBDIRECTORY_PATH/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [QSA,L]
2つ目は public/
ディレクトリの中に新規で .htaccess
を作成し、上述のような記述をします (Webサーバが Apache 前提)。
ただし RewriteBase /SUBDIRECTORY_PATH/
は実際のサブディレクトリのパスに応じて書き換えてください。
(例えば https://www.example.com/hoge/
がプロジェクトのルートならば RewriteBase /hoge/
といった具合。)
この記述のうち3行目以降は「そのディレクトリ配下のアクセスで、 URI のパスに該当するファイルやディレクトリが存在しない場合は全て index.html
へのアクセスとする」ということですね。
1~2行目でベースパスをサブディレクトリに変更していることと併せて、アクセスをコントロールしています。
今回はシンプルにルーティングも何もないトップページを表示させて終わり、の簡単なアプリだったのでこれで済みました。