Angular で、.htaccess を使用してファイルを無視する方法

Apr 24 2020

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]

アプリのコンパイル時に特定のファイルを無視するにはどうすればよいですか?

回答

2 cerkiner May 24 2020 at 09:33

情報

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

satanTime Apr 28 2020 at 23:31

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]