Angular で、.htaccess を使用してファイルを無視する方法
Angular 9.x を使用しています。ルート ディレクトリ内の特定のファイルを無視する必要があります。例えば:
/root
- index.html
- ignorefile.json
書き換えルールを .htaccess に追加しようとしましたが、成功しませんでした。
RewriteEngine On
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_URI} !^/ignorefile\.json$ [NC] # this does not work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
アプリのコンパイル時に特定のファイルを無視するにはどうすればよいですか?
回答
情報
Angular はサーバー側のリダイレクトを生成および処理しません。
あるビューから次のビューへの Angular のナビゲーションを処理するには、Angular ルーターを使用します。ルーターは、ブラウザーの URL をビューを変更する命令として解釈することにより、ナビゲーションを有効にします。
ルーターが新しいコンポーネント ビューに移動すると、ブラウザーの場所と履歴がそのビューの URL で更新されます。これは厳密にローカルな URL であるため、ブラウザーはこの URL をサーバーに送信せず、ページをリロードしません。
最新のブラウザーに (Angular 9 のデフォルト) PathLocationStrategy を使用している場合、それらは history.pushState をサポートします。これは、サーバー ページ リクエストをトリガーせずにブラウザーの場所と履歴を変更する手法です。ルーターは、ページの読み込みが必要な URL と見分けがつかない「自然な」URL を作成できます。
この場合、サーバーはすべてのトラフィックを index.html にリダイレクトする必要があるため、Angular は UI でパスを処理することができます。このためには、ルーティングを機能させるために、運用サーバーに .htaccess ファイルを追加する必要があります。
答え
Angular アプリと一緒に ignorefile.json を提供しようとしている場合、それはかなり可能です。angular.json ファイルを更新する必要があります。
"assets": [
...
{
"glob": "ignorefile.json",
"input": "src/",
"output": "/"
},
...
]
foo.com は Angular アプリをロードしますが、foo.com/ignorefile.json は JSON データを表示します。
この回答を確認してください。https://stackoverflow.com/a/61972932/2827820
index.html と同じルールを使用します。追加することをお勧めしRewriteBase /
ます。
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond ^ignorefile\.json$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
うまくいかない場合 - より厳密にする
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond ^ignorefile\.json$ - [END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]