2013-03-13 17 views
6

AngularJSでApache 2.2をセットアップしようとしていますが、以下の閉鎖質問の構造とほぼ同じ構造です。anglejsにApacheリライトルールが適用されていません

rewrite rules for apache 2 to use with angular js

私は/ APIへのリクエストを除くアプリ/ index.htmlをするすべての要求をリダイレクトしたいと思います。

私のディレクトリ構造が続い

  • /
  • /アプリ
  • /app/index.html
  • /アプリ/ CSS
  • /アプリ/ JS
  • /APIの通りです

私はこれらのリダイレクトルールをhttpd-vhostsファイルにそのまま適用してください。このリダイレクトルールは、正しい回答https://stackoverflow.com/a/15284848/671095として質問に投稿されました。

私がブラウザにアクセスしようとすると、空白の画面が表示されます。しかし、ブラウザで/app/index.htmlに入力すると、ブラウザでhtmlページを見ることができますが、css.or jsのどれもアクセスできず、404を返すことはありません。

私は行っていますこれは、apacheの書き換えとして実現する簡単なもののようなものです。

ご協力いただければ幸いです。

答えて

2

私はこの同じ問題がありました。しかし、私はmod_rewriteで無知ですので、Googleにはたくさんありました。 私はこのメールに解決策を見つけた:

https://groups.google.com/d/msg/angular/GmNiNVyvonk/mmffPbIcnRoJ

だから私は、次のようにあなたの.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 
RewriteRule ^.*$ - [NC,L] 

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

お知らせ(.*)#/$1

注:MUST CSS、JSなどの絶対パスを使用してください。エラーが発生しない場合は、

resource interpreted as script but transferred with mime type text/html

+0

私はこれらのルールをhttpd-vhostsファイルに適用しましたが、 'mywebsite.com'にアクセスしようとすると、' mywebsite.com/app/'にアクセスするとindex.htmlファイルにも渡されませんブラウザに404が表示されました – matthew

+0

あなたのコードを使用しましたが、「Internal Server Error」というメッセージが表示されます。どのようにこれを修正するための任意のアイデア? – Devner

13

これは、Apache 2.2.16以降でFallbackResourceディレクティブを使用する方がずっと簡単です。

FallbackResource /app/index.html 

http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

あなたのAPIへのアクセスを転送しているどのようにも具体的にAPIリクエスト(2.2.24+)上でのフォールバックリソースを無効にするエンクロージャを活用する必要がある場合もあります。私にとって

<Directory /api> 
    FallbackResource disabled 
</Directory> 
+0

apache 2.4.xの魅力のように動作します! –

11

This作品:

<ifModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !index 
    RewriteRule (.*) index.html [L] 
</ifModule> 
+0

このコメントに追加するだけで、Angularアプリがホストのルートにない場合、つまりコンテンツがhttp://example.com/moo/のようなディレクトリにある場合は、適切な ''タグを追加する必要があります。 http://example.com/moo/の例では、タグは ''にする必要があります。これはアセットとテンプレートが正しく読み込まれるようにすることです – BahamutWC

+0

@BahamutWC:基本タグは推奨されません。 http://docs.angularjs.org/guide/dev_guide.services.$location – Daan

+1

@Daan Angularはルート文書から提供することをお勧めします。しかし何らかの理由でできない場合は、「」タグを使用する必要があります。 – BahamutWC

1

あなたはまだこの問題を抱えているが、私はAngularJSと同じ症状を持っていた場合には分からないとApache 2

私の問題実際に私がIEを使用していて、それが自動的に互換モードになるということでした。私はHTMLの下の行を使っていました。

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

さらに、ここで説明:< What does <meta http-equiv="X-UA-Compatible" content="IE=edge"> do?>。

関連する問題