16

Zend フレームワークは初めてです。共有ホスティングに zend フレームワークを実装する方法を知りたいです。Zend フレームワークのフォルダー構造により、すべてのビュー ファイルは "public" フォルダーに配置されます。

仮定する

「/」は私にとってメインのルート フォルダーであり、public は「/public」のようなものです。

URLが「http://site/public/ . .. .bla bla...」になるように

これは正しいです?

または他の方法はありますか?

仮想ホストを作成する権限がありません。

じゃあ何をすればいいの?

私の質問を理解していただければ幸いです。そうでない場合は、私に尋ねてください。

ありがとうございました!

4

12 に答える 12

12

最善の方法は、公開ディレクトリ (Zend Framework ディレクトリ構造) から .htaccess を削除し、次の内容で「ルート」ディレクトリに配置することだと思います。

 
RewriteEngine On

RewriteRule ^.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.$ RewriteRule ^(.)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

于 2009-07-12T09:58:40.303 に答える
11

この .htacces ファイルをベース パス (/../public) の下に含めます。

RewriteEngine On

# Exclude some directories from URI rewriting
#RewriteRule ^(dir1|dir2|dir3) - [L]

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

そして、publc ディレクトリの下にあった .htaccess を元の場所に残します。

したがって、2 つの .htaccess ファイルが作成されます。1 つは public ディレクトリ (Zend Framework ドキュメントの通常のファイル) の下にあり、もう 1 つはベース パス (上に投稿したもの) の下にあります。

于 2009-07-18T12:49:58.180 に答える
2

プロジェクトの Public フォルダーをホストの www フォルダーに配置して、アドレスが yourdomain.com/ になるようにする必要があります。ライブラリ、アプリケーションなどのソース コード フォルダーは、www フォルダー内ではなく、同じレベルに配置する必要があります。この方法により、サイトのセキュリティが向上します

于 2009-12-15T11:32:26.833 に答える
1

実際、共有ホスティングで Zend Framework アプリケーションを実行するのは最善の策ではありません。バーチャル プライベート ホスティング (VPS) を取得することを強くお勧めします。Zend Framework やその他のフレームワークが既にインストールされ、定期的に更新されている、非常に優れた安価なホスティングがあります。私はサーバーグローブにいますが、これまでのところ素晴らしいです!

しかし、これは、共有ホスティングで動作させることができないという意味ではありません. むしろ .htacess を使用する必要があります。パブリック フォルダーのコンテンツを Web ルートに配置し、bootstrap.php のパスを調整します。他のすべてのフォルダーに直接アクセスできないことを確認し、index.php を介してすべてをルーティングする通常の ZF アプローチを使用します。

于 2009-07-12T09:58:13.550 に答える
1

ArneRie からの回答はうまくいかず、最終的にLorenzo Albertons のソリューションを使用することになりました。これが他の人がより迅速な解決策を得るのに役立つことを願っています.

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]
于 2010-11-25T23:40:57.157 に答える
1

実際、私はそれを検索し、多くの答えを見つけました (ほとんどは SO にあります) が、どれもうまくいきませんでした。だから私は最終的に解決策を見つけました-ルートディレクトリの.htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php

これはhttp://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriterからのもの で、ルート ディレクトリの index.php は次のとおりです。

<?php 
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';
?>

これはhttp://akrabat.com/zend-framework/zend-framework-on-a-shared-host/から のもので、フォーラムなどのように、ルートフォルダーに他のプロジェクトディレクトリがあっても機能します。それは誰かに役立つかもしれないと思った:)

于 2012-02-16T08:19:56.370 に答える
1

また、ロブ・アレンは良い解決策を書きました

Zend Framework 2を使用していますが、うまくいきました。上記のリンクから「公開ファイルの参照」の部分を行っていませんが。

layout.phtmlのコードを次のように変更しました。

$basePath = $this->basePath();

に:

$basePath = $this->basePath();
if (defined('RUNNING_FROM_ROOT')) {
    $basePath .= 'public/';
}
于 2012-06-27T15:14:09.683 に答える
0

最近この問題に遭遇し、このスレッドを通じて解決策を見つけることができました。zf2を使用しています。だから私がしなければならなかったのは、私たちが言うことができるディレクトリにzend関連のファイルを置くことだけでしたsrc. このディレクトリは、パブリック ディレクトリまたはルート ディレクトリ ( など/www)にあります。

  1. 「src」ディレクトリに .htaccess ファイルを作成し、Deny from All ディレクティブを追加します。

  2. インデックス ファイルでsrc、次の手順を実行して、作業ディレクトリをフォルダーに変更します。

    define('SRC_ROOT', 'src');
    chdir(SRC_ROOT);
    

...そして、あなたは行ってもいいです!

于 2013-09-05T15:22:52.860 に答える
0

仮想ホストの設定は通常、httpd.conf または extra/httpd-vhosts.conf 内で行われます。httpd-vhosts.conf を使用している場合は、このファイルがメインの httpd.conf ファイルに含まれていることを確認してください。一部の Linux ディストリビューション (例: Ubuntu) では、構成ファイルが /etc/apache2 に格納され、フォルダー /etc/apache2/sites-enabled 内に仮想ホストごとに 1 つのファイルが作成されるように、Apache をパッケージ化します。この場合、以下の仮想ホスト ブロックをファイル /etc/apache2/sites-enabled/zf2-tutorial に配置します。

NameVirtualHost が定義され、「*:80」などに設定されていることを確認してから、次の行に沿って仮想ホストを定義します。

Setting up the virtual host is usually done within httpd.conf or extra/httpd-vhosts.conf. If you are using httpd-vhosts.conf, ensure that this file is included by your main httpd.conf file. Some Linux distributions (ex: Ubuntu) package Apache so that configuration files are stored in /etc/apache2 and create one file per virtual host inside folder /etc/apache2/sites-enabled. In this case, you would place the virtual host block below into the file /etc/apache2/sites-enabled/zf2-tutorial.

Ensure that NameVirtualHost is defined and set to “*:80” or similar, and then define a virtual host along these lines:

 <VirtualHost *:80>
     ServerName zf2-tutorial.localhost
     DocumentRoot /path/to/zf2-tutorial/public
     SetEnv APPLICATION_ENV "development"
     <Directory /path/to/zf2-tutorial/public>
         DirectoryIndex index.php
         AllowOverride All
         Order allow,deny
         Allow from all
     </Directory>
 </VirtualHost>

Make sure that you update your /etc/hosts or c:\windows\system32\drivers\etc\hosts file so that zf2-tutorial.localhost is mapped to 127.0.0.1.

/etc/hosts または c:\windows\system32\drivers\etc\hosts ファイルを更新して、zf2-tutorial.localhost が 127.0.0.1 にマップされるようにしてください。

于 2015-10-29T12:46:38.200 に答える
0

私は同じ状況にあり、zend ライブラリを「src」のような public の下のフォルダーの下に置き、すべてから .htaccess Deny を使用しました。いくつかのパスをジャグリングする必要がありますが、うまく機能します。

于 2009-07-13T04:51:15.347 に答える
-1

最も簡単な方法をお勧めします: index.php がルートにあるような方法でアプリを開発します (さらに良い - index.php で常に PUBLIC_PATH を定義dirname(__FILE__);し、この定数に関連するリンクを作成します)。アプリケーションおよびライブラリ フォルダーと共に。deny from allin .htaccessを使用して、外部から簡単にアクセスできないようにすることができます。

PUBLIC_PATH 定数は、パブリックがパブリックでない場合にも役立ちます。(public html または /public html/www (私の場合))

于 2009-07-12T16:59:06.160 に答える