2016-08-26 5 views
11

概要:の.htaccess

私は$locationProvider.html5Mode(true)を使用していますAngularJSアプリケーションを持っており、それは、Apacheサーバから提供されます。これまでは、他のソースコードからアクセスするためにソースコードを使用していましたが、私はangularJSのHTML5モードではindex.htmlへのリダイレクトが必要でした。だから/appフォルダの.htaccessファイル用にこれを持っていました。

の.htaccess:

<IfModule mod_rewrite.c> 

    RewriteEngine on 

    # Don't rewrite files or directories 
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule^- [L] 

    # Rewrite everything else to index.html to allow html5 state links 
    RewriteRule^index.html [L] 

</IfModule> 

修飾:

I次いで今縮小さ溶液である(APPの/distフォルダに生成される溶液全体を縮小化するためのグラントを添加/ app/distにあります)。ユーザーがリンクを変更することなく、アプリのトラフィック全体をミニバージョンにルーティングしたいと考えています。ですから、実際には/ appから/ app/distにすべてのコールをリダイレクトしたいと思います。今

ディレクトリ構造:

app 
    dist 
     minified versions(css,html,js) 

私は/アプリの.htaccessでhereからいくつかの条件を使用して試してみました/アプリ/ distの中の他の.htaccessファイルを移動し、ない成功を収めました。私は2つがこのように結合できるかどうかも分かりません。代わりに/ appとしてdistフォルダを使うことができると知っていますが、/ appはリポジトリであり、更新するのが簡単です。だから私はどのようにリダイレクトでこれを達成するために管理できますか?

また、フラグを何らかの形で置くことができるので、アルファユーザーは通常の(拡張されていない)バージョンを使用してデバッグを改善できますか?

更新:

私はこのhereのためのサンプルプロジェクトを追加しました。私は上に示した最初の.htaccessファイルを保持しており、上記のように両方のバージョン(/test/test/dist)が動作することを確認できます。また、おそらく未使用のコードと依存関係がありますが、私は自分のプロジェクトから他の部分を削除しました(D:裁判官ではありません)。

AngularJS 1.4.8の初期設定では、herehereのようなエラーが発生することがありました。 AngularJSのバージョンを1.5.8(Angular 1の最後の安定版)に更新してください。ただし、Cosmin Ababei's postのコメントも考慮してください。また、このプロジェクトでは、grunt(およびgrunt用のその他の拡張機能)、角型などの基本コンポーネントのインストール、naked版のビルドにnpmを使用しています(実際は同じファイル内のリソースを連結するだけです)。依存関係を変更する必要がある場合は、bower installを実行することを忘れないでください。 distフォルダを再生成する場合は、npm installgrunt buildを必ず実行してください。

+0

RewriteRule^dist/index.html [L] – Fasermaler

+0

しかしリソースはdistフォルダにもありますか? –

+0

ああ、私はそれを見落とした。さて、この時点で私は自分自身をグーグルに絞っていますが、これはあなたの状況(ワードプレスについてですが、それは良い記述です):https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory#Pointing_your_home_siteのように見えます。 27s_URL_to_a_subdirectory – Fasermaler

答えて

1

/distディレクトリ内には、更新されたリソースと正しい<base>タグを指し示す更新されたURLを持つindex.htmlがあるとします。ちょうどあなたが非圧縮index.htmlのために使用している値に/distを追加し、あなたは大丈夫だろう - <base>タグが/distフォルダを指している必要があることに注意してください。それらのもので

ために、ここで更新.htaccessファイルです:私はとして最も可能性が高い必要のないRewriteCond %{REQUEST_FILENAME} -dを削除した

  • RewriteEngine On 
    
    # Don't rewrite files 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule^- [L] 
    
    # If the ALPHA_USER cookie is set, serve the uncompressed files 
    RewriteCond %{HTTP_COOKIE} ALPHA_USER [NC] 
    RewriteRule^index.html [L] 
    
    # Rewrite everything 
    RewriteRule^dist/index.html [L] 
    

    は、次の2つの事に気付くでしょうディレクトリ全体にサービスを提供する

  • ALPHA_USERのクッキーを追加しました。このクッキーは、ユーザーをアンコンパンプにリダイレクトしますエッセードファイル。このクッキーには、あなたが望むあらゆる価値があります。

+0

まだ動作しません。次のエラーが表示されます。 "app.src.js:20938 Uncaught TypeError:プロパティ 'undefinedのreplace'を読み取れません。私はデバッグしようとしている場合、私は間違って取得するここに来る。また、はい、distフォルダ内のベースタグには/ distがあり、古いdist_htaccessの/ distフォルダにlocalhost/app/distと入力するとすべて動作します。 –

+0

http://stackoverflow.com/questions/29261782/typeerror-cannot-read-property-replace-of-undefinedとhttps://github.com/angular/angular.js/issues/11091に関するいくつかの調査の後、私は1.5.8に角度を更新し、それは動作します。残念ながら、http:// localhost/app/distリンクにアクセスするようになりました。おそらく角が私をリダイレクトします。何とかこれを隠すことはできますか?または、最初のstackoverflowリンクの可能性として説明されている角型アプリで、手でURLを設定する必要がありますか? –

+0

」のURLは、サーバの絶対URLを指している必要があります。たとえば、今のところあなたのアプリを 'www.my-domain.com/app'に持っていたら、それを' www.my-domain.com/app/dist'に更新する必要があります。あなたのURLに 'localhost'がどのようにあるのか分かりません。 –

0

public_htmlの=> /アプリ=>内部でこれを試して.htaccessファイル:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^dist/index.html [L] 

注: HTML <base>タグはdistのフォルダをポイントする必要があります。このソリューションがあなたの期待通りに機能することを願っています。

+0

はERR_TOO_MANY_REDIRECTSで失敗します。 –

+0

@RaduVlad私は答えを更新しました。今すぐご確認ください。 –

+0

私はまだ同じエラーが発生します:(。 –