2

シングルページ アプリの場合、JS が URL を解析し、それに応じてコントローラーを起動できるように、.htaccess ファイルに次の RewriteRule を設定して、すべてのトラフィックを index.html に転送します。

  # html5 pushstate (history) support:
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !index
  RewriteRule (.*) index.html [L]

これは、www.mydomain.com/resource のようなトップ レベルの URL では問題なく機能しますが、www.mydomain.com/resource/123 のようなより深い URL では、index.html で現在のディレクトリ ('.') の値が壊れます。

たとえば、次のような index.html のスクリプト タグ

<script src="js/app/config.js"></script>

src="resource/app/config.js" に変換されます

または、「www.mydomain.com/more/nested/resource/123」のような URL の場合、同じ js ファイルの src は「more/nested/resource/app/config.js」と解釈されます。

言うまでもなく、それらのファイルは存在せず、アプリは壊れます。

ここで何が起こっているのか、誰にも光を当てることができますか? ありがとう。

4

2 に答える 2

7

私はそれを機能させました。これが方法です:

src として以下を指定すると:

<script src="js/app/config.js"></script>

Apache が正しく index.html (または任意のフォールバック URL) に再ルーティングし、URL のネストされたパスに従って相対的にリソースにアクセスしようとするのはあなたの言うとおりです。

これを修正するには、次のようにルート ディレクトリを示す先頭に「/」を付ける必要があります。

<script src="/js/app/config.js"></script>

js ライブラリ、css シートなどに対してこれを行うと、完全に正常に機能し、backbone.js がそこからすべての URL を処理しました。

注: Apache 2.2 以降では、mod_rewrite の代わりにFallbackResourceを使用できるようになりました。必要な行数が少なくなり、同じことを達成できます。

もう 1 つ推奨されるのは、可能な限り絶対 URL を使用することです。

于 2012-06-16T06:18:24.537 に答える
2

I'm using this for html5 history support -- anything in the js, css, img, or svc directories is unmodified. Everything else goes to index.html:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(js|css|img|svc)($|/) - [L]
RewriteRule ^(.*)$ index.html [L]

Note, I just saw your comment below. If you reference your scripts as

<script src="/js/myscript.js"> 

then you shouldn't need to worry about the base location of your html. Note the slash before "js". I realize this was pointed out in another answer, but the comination of that technique and the rewrite rules might do the trick.

于 2013-04-17T22:25:42.240 に答える