2016-06-11 19 views
0

仮想ホストをサポートしていないVPSサーバーにZF2アプリケーションをインストールしたい。私はZendApplicationSkeletonに基づく単純なアプリケーションを使用しています。デフォルト.htaccessを使用してZF2 ApacheをVPSにインストールして仮想ホストを作成する

- 私:

RewriteEngine On 
# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

I'veがで見つかったすべてのソリューション

はSO私のために動作しません。彼らはZF1に合うことはなく、ZF2:

Link 1

Link 2

Link 3

Link 4

私のアプリケーションは/var/www/html/testappという名前のフォルダ内にあります。

ブラウザにlocalhost/testapp/publicと入力するとメインページが読み込まれます。また、localhost/testapp/moduleと入力するとモジュールがロードされますが、ナビゲーションは機能しません。

すなわち:メインページでは、I'veは次のようにボタンを作成しました:

<a href="/module/index">Go To Module</a> 

しかし、私はそれをクリックした場合、私はNot Foundを示すlocalhost/login/indexに、正しくないmodule/index.phtmlページに移動します。

それに感謝します。

+0

どのホスティングサービスを使用しますか?どういうわけかあなたが提供したいフォルダをセットアップする可能性はほとんどないと私はほとんど信じられません。 – Wilt

+0

リンク/モジュール/インデックスがアクセスされているときにlocalhost/login/indexにリダイレクトするログイン/認証チェックがあるようです。あなたのログイン/オーセンティケータを確認し、ログインが必要ない場合はリダイレクトが無効になっていることを確認してください。(012目的) – xangxiong

+0

また、ZF2アプリケーションの場合、パブリックフォルダはWebアプリケーションのルートディレクトリにする必要があります。したがって、DocumentRootとして/ var/www/html/testapp/publicを使用するようにVHOSTを設定する必要があります。また、あなたのアプリケーションが/ var/www/htmlにあるので、デフォルトのApache設定がファイルを直接提供しようとしている可能性があります。その結果、あなたのZF2ルート定義と一致しないURLになる可能性があります。あなたのアプリケーションを/ var/www/htmlディレクトリの外に移動して、プライベートな設定やファイルにアクセスすることができないようにするのが最善の方法です。 – xangxiong

答えて

1

問題はサーバー構成とは関係ありません。あなたのアプリはサブフォルダ内にあるので、リンクは間違っています。

<a href="/testapp/public/module/index">Go To Module</a> 

のようにする必要があります。ただし、public/はあなたのURLに表示されるべきではありません。このように設定することで、ユーザーがアプリのWebルート以外のファイルを閲覧できるようになり、潜在的なセキュリティリスクが発生し、URLが不正になります。

この解決方法は、ZF2アプリの別の仮想ホストをセットアップすることです。この仮想ホストには、アプリケーションのパブリックフォルダを指すドキュメントルートがあります。これに問題がある場合は、質問として投稿してください。なぜこれが不可能であるかを説明できれば、さらに助言することができます。

+0

@ウィルト:あなたが何であるか分かりません単にZF2チュートリアルにリンクすることによって示唆されています。仮想ホストを使用することは、ここでの真の解決策です。それがあなたが示唆しているものなら、私たちはどちらも同意します。私が提出したリンクの例は、OPが現在持っているものがなぜ機能しないのかを説明することだけでした。 –

+0

十分に公正です。あなたは、私があなたに同意するあなたの他の答えにコメントを投稿したことがわかります。実際の解決策をより明確にするために私の答えを編集しました。 –

+0

私は自分のコメントを削除しupvoted、これは実際にはこれと関係があるので、あなたはまだ "サーバーの設定とは関係ありません"を削除することができます... – Wilt