ベースパスパターン
作成2026年4月4日Takeshi Takatsudo
_redirects を使って /pj/my-site/ のようなサブパスでサイトを配信する
パターンの概要
多くのプロジェクトでは、ルートではなくサブパス(例:https://example.pages.dev/pj/my-site/)配下でサイトを配信しています。これには以下の3つが必要です:
- フレームワークのベースパス設定 — プレフィックス付きの URL を生成するようフレームワークを設定する
- デプロイディレクトリのネスト — ビルド済みファイルを適切なサブディレクトリに配置する
- ルートリダイレクト —
/からサブパスへリダイレクトする_redirectsファイル
Astro の設定
Astro の設定で base を指定します:
// astro.config.ts
export default defineConfig({
output: "static",
base: "/pj/my-site",
});
⚠️ ベースパスは URL にのみ影響する
Astro の base は生成される URL とリンクにのみ影響します。出力ディレクトリの構造は 変わりません — ファイルは引き続き dist/ のルートレベルに出力されます。デプロイ時にディレクトリのネストを自分で処理する必要があります。
デプロイディレクトリのセットアップ
CI でデプロイ前にネスト構造を作成します:
mkdir -p deploy/pj/my-site
cp -r dist/* deploy/pj/my-site/
echo '/ /pj/my-site/ 302' > deploy/_redirects
npx wrangler@4 pages deploy deploy --project-name=my-site --branch=main
Astro の出力モードへの対応
Astro は静的出力では dist/ に、SSR では dist/client/ に出力します。両方に対応するには:
if [ -d dist/client ]; then
cp -r dist/client/. deploy/pj/my-site/
else
cp -r dist/. deploy/pj/my-site/
fi
_redirects ファイル
_redirects ファイルは、Cloudflare Pages に URL ルーティングを指示します。デプロイディレクトリのルートに配置します:
/ /pj/my-site/ 302
これにより、ルートにアクセスした訪問者を実際のサイトパスにリダイレクトします。
リダイレクトの構文
<source> <destination> <status-code>
301— 恒久的リダイレクト(ブラウザにキャッシュされる)302— 一時的リダイレクト(キャッシュされない)- 開発中は
302を、安定したパスには301を使用
複数のリダイレクト
URL 構造が変更されたサイトの場合:
/ /pj/my-site/ 302
/pj/my-site/old-path /pj/my-site/new-path 301
💡 Tip
CI でヒアドキュメントを使って _redirects を生成する場合、先頭の空白に注意してください。sed -i 's/^[[:space:]]*//' deploy/_redirects で空白を除去できます。