ローカルで完全に正常に動作する反応アプリがあり、それをAzureにデプロイすると、index.htmlでいくつかの404エラーが発生します
タグ%PUBLIC_URL%が付いたすべて
ドキュメントによると、それらはビルドプロセスで置き換えられますが、これがどのように行われるかは不明であるため、デプロイ時に正しいURLが配置されます
<!doctype html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="theme-color" content="#000000">
<!--
manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="icon" type="image/png" sizes="32x32" href="%PUBLIC_URL%/favicon.png">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700" rel="stylesheet" async>
<link async rel="stylesheet" href="%PUBLIC_URL%/css/ionicons.min.css">
<link rel="stylesheet" href="https://unpkg.com/[email protected]/style.min.css">
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"
integrity="sha512-M2wvCLH6DSRazYeZRIm1JnYyh22purTM+FDB5CsyxtQJYeKq83arPe5wgbNmcFXGqiSH2XR8dT/fJISVA1r/zQ=="
crossorigin="" async/>
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Isomorphic</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
%PUBLIC_URL%を置き換える方法
デフォルトでは、Create Reactアプリは、アプリがサーバールートでホストされていると想定してビルドを生成します。example.com
ウェブサイトがこのルートから提供されない場合、 example.com/relativepath
から、package.jsonでホームページを指定することでこれをオーバーライドできます
"homepage": "http://example.com/relativepath",
これにより、Create Reactアプリは、生成されたHTMLファイルで使用するルートパスを正しく推測できます。
ただし、あなたの場合、Azureがindex.html(または他のindex。*という名前)を見つけようとしているため、404エラーが発生すると思います。これを修正するには、Azureは、サイトのルートに配置された唯一のindex.htmlに目的のルートを渡す方法を知る必要があります。次の内容で、web.config
フォルダ内に/site/wwwroot
という名前の新しいファイルを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="React Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
これにより、AzureにすべてのURLがルートファイルを指しているかのように書き換え、SPAアプリケーションがリンクを正しく処理できるようになります。
参照:
https://facebook.github.io/create-react-app/docs/deployment#building-for-relative-paths
https://medium.com/@to_pe/deploying-create-react-app-on-Microsoft-Azure-c0f6686a4321
これがお役に立てば幸いです
これは、public
ではなくbuild
から取得されたインデックスファイルのようです。
ドキュメントが言うように、%PUBLIC_URL%
は、プロジェクトをビルドすると置き換えられます。
create-react-app
、実行していることを確認してくださいnpm run build
およびbuild
ディレクトリのファイルをホストします。