25

明らかに、多くの mod の書き換えに関する議論と回答が Web 全体に存在します。しかし、私はそれらを把握するのに苦労しています。と思ったので、こちらで質問させていただきました。

ここのコメントでアンディ・ジョスリンが説明したことを行うための書き換えルールを求めています: https://stackoverflow.com/a/11100438

これは、example.com のルートにある現在のディレクトリ構造です。

  • アプリ/
  • app/index.html (angular js アプリケーションの「ルート」)
  • api (これは 'api' に使用される symfony 2 アプリになります。ここでは、angular から ajax リクエストを送受信します。)

/api へのリクエストを除いて、すべてのリクエストを app/index.html にリダイレクトしたいと考えています。

例えば:

http://example.com/categories/electronics/ipodは実際にはhttp://example.com/app/index.html/categories/electronics/ipodに行くようなものです

ただし、 app/index.html 部分を非表示にしたいと思います。

次に、 http://example.com/apiへのリクエストには例外があります。これは、これらの URL パスに対して ajax リクエストを行う必要があるためです。

あらゆるヘルプ/ガイダンスに感謝します。

4

5 に答える 5

29

この質問に対する受け入れられた回答は古くなっています。Apache 2.2.16+ の conf ファイルで FallbackResource ディレクティブを使用できるようになりました。

FallbackResource /app/index.html

FallbackResource ディレクティブで「/api」ルートを無視する場合:

<Directory /api>
FallbackResource disabled
</Directory> 
于 2016-04-05T20:47:38.277 に答える
17

ここにあなたが始めるための何かがあります(これをあなたの /.htaccess ファイルの中に入れてください):

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/api

# otherwise forward it to index.html 
RewriteRule ^.*$ - [NC,L]
RewriteRule ^app/. /app/index.html [NC,L]

注:新しい Apache バージョンについては、次の回答も参照してください。FallbackResource

于 2013-03-08T00:52:35.423 に答える
0

この回答の問題は、ファイルが見つからない場合に 404 が必要なことです。フロントエンド アプリケーションをどのように構築しているかにもよりますが、特に大規模な動的アプリケーションを構築している場合や、フロントエンド作業を外部委託している場合は、css やその他のファイルが 404 を返すことは非常に一般的です。また、Angular ルートは通常、ファイル システム上の何にも関連していません。上記は、単一のディレクトリに絞り込む場合に機能する場合があります。たとえば、ファイル システム レイアウト (/ajs/) に関連しないすべての角度ルートに共通のプレフィックスを使用することがよくあります。できれば

<Directory /ajs>
FallbackResource /app/index.html
</Directory> 

そうすればもっと理にかなっていますが、それは私にはうまくいかないようです。共通のプレフィックスを使用すると、バックエンドに関係なく、バックエンド ルールがはるかに単純になります。たとえば、リバース プロキシを使用していない場合は、単純なサーバー フォワード コントローラーをセットアップできます。また、Apache の書き換えルールを簡単にモデル化できます。例えば:

RewriteEngine On
RewriteRule ^/ajs/(.+)$ /index.html

とは言っても、ディレクトリ/フォールバック メソッドはこれまで見たことがありません。そのため、必要な書き換えが角度転送だけである場合に備えて、それを調査することに興味があります。ありがとう!

于 2017-02-19T21:22:59.707 に答える