在共享 Web 主机上部署
Deploy on Shared Web Host
我有一个简单的问题,但我无法在任何地方找到直接的答案。
我对 apache .htaccess 不是很熟悉,现在我应该在不允许我更改网站根文件夹的 Web 主机上部署 ZF2 应用程序。
我有一个标准的项目结构,所以我的 index.php
文件位于 /public
文件夹中,如下所示:
www.mydomain.com
root/ <--- I can't set root to /public folder
/config
...
/module
...
/public
.htaccess
index.php
...
/vendor
...
...
这来自 ZF2 骨架应用程序。
拜托,我需要一个解决方法,我确信这是一个非常普遍的问题,许多 ZF2 开发人员已经解决了这个问题。我想我应该向 /root
添加一个 .htaccess 文件,但我不知道如何编写在这种情况下可以使用的文件。
一如既往,非常感谢您的帮助,
段
为了完成这项工作,您必须从 /public
文件夹中取出所有内容并将其放入您的网络根目录中。必须编辑框架应用程序中的文件 index.php
以考虑其新位置。
首先删除行:
chdir(dirname(__DIR__));
因为它的目的是将当前目录设置为我们已经在里面的网络根目录。
其次,您必须:
将 require 'init_autoloader.php'
行替换为 require 'vendor/autoload.php'
(如果使用 composer)。
或
在您的 .htaccess
中,将 ZF2_PATH
环境变量设置为您服务器上安装 zf2 的位置:
#First line of your .htaccess
SetEnv ZF2_PATH path/to/zf2
现在它应该可以正常工作了。
让它变得更好
通过上述设置,您必须将所有 public 文件夹放入网络根目录。如果您和我一样不喜欢,请继续阅读。
您可以将 public 文件夹(例如 /js
、/css
)放在 /public
中(index.php
和 .htaccess
仍然需要位于根目录中)通过简单地告诉 zf2 你的新 base_path
。这是视图脚本中的 basePath()
视图助手所使用的。您只需将以下内容添加到您的配置中:
'view_manager' => array(
'base_path' => './public',
),
并且 basePath()
视图助手将输出正确的 url。
做得更好
此设置的最后一个问题是您的应用程序文件可从网络访问。为了解决这个问题,我把我想隐藏的所有东西都放在 /private
文件夹中。您最终得到的项目结构类似于:
/root
/private
/config
/data
/module
/vendor
.htaccess <-- You have to create this one
composer.json
composer.lock <-- Created by composer after install
composer.phar
/public
/css
/js
.htaccess
index.php
在 /private
文件夹中,您必须创建一个新的 .htaccess
文件并将此行放入其中:
Deny from all
这使得无法从网络访问文件夹中的所有内容。
通过此更改,您已经破坏了您的应用程序。事实上在 /private/config/application.config.php
你必须调整 module_paths
配置:
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
),
您必须在路径前添加 /private
:
'module_listener_options' => array(
'module_paths' => array(
'./private/module',
'./private/vendor',
),
),
这将使您的应用再次 运行。现在您可以将 ZF2 应用程序部署到共享的 Web 主机并保留干净的项目结构。
我有一个简单的问题,但我无法在任何地方找到直接的答案。
我对 apache .htaccess 不是很熟悉,现在我应该在不允许我更改网站根文件夹的 Web 主机上部署 ZF2 应用程序。
我有一个标准的项目结构,所以我的 index.php
文件位于 /public
文件夹中,如下所示:
www.mydomain.com
root/ <--- I can't set root to /public folder
/config
...
/module
...
/public
.htaccess
index.php
...
/vendor
...
...
这来自 ZF2 骨架应用程序。
拜托,我需要一个解决方法,我确信这是一个非常普遍的问题,许多 ZF2 开发人员已经解决了这个问题。我想我应该向 /root
添加一个 .htaccess 文件,但我不知道如何编写在这种情况下可以使用的文件。
一如既往,非常感谢您的帮助,
段
为了完成这项工作,您必须从 /public
文件夹中取出所有内容并将其放入您的网络根目录中。必须编辑框架应用程序中的文件 index.php
以考虑其新位置。
首先删除行:
chdir(dirname(__DIR__));
因为它的目的是将当前目录设置为我们已经在里面的网络根目录。
其次,您必须:
将 require 'init_autoloader.php'
行替换为 require 'vendor/autoload.php'
(如果使用 composer)。
或
在您的 .htaccess
中,将 ZF2_PATH
环境变量设置为您服务器上安装 zf2 的位置:
#First line of your .htaccess
SetEnv ZF2_PATH path/to/zf2
现在它应该可以正常工作了。
让它变得更好
通过上述设置,您必须将所有 public 文件夹放入网络根目录。如果您和我一样不喜欢,请继续阅读。
您可以将 public 文件夹(例如 /js
、/css
)放在 /public
中(index.php
和 .htaccess
仍然需要位于根目录中)通过简单地告诉 zf2 你的新 base_path
。这是视图脚本中的 basePath()
视图助手所使用的。您只需将以下内容添加到您的配置中:
'view_manager' => array(
'base_path' => './public',
),
并且 basePath()
视图助手将输出正确的 url。
做得更好
此设置的最后一个问题是您的应用程序文件可从网络访问。为了解决这个问题,我把我想隐藏的所有东西都放在 /private
文件夹中。您最终得到的项目结构类似于:
/root
/private
/config
/data
/module
/vendor
.htaccess <-- You have to create this one
composer.json
composer.lock <-- Created by composer after install
composer.phar
/public
/css
/js
.htaccess
index.php
在 /private
文件夹中,您必须创建一个新的 .htaccess
文件并将此行放入其中:
Deny from all
这使得无法从网络访问文件夹中的所有内容。
通过此更改,您已经破坏了您的应用程序。事实上在 /private/config/application.config.php
你必须调整 module_paths
配置:
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
),
您必须在路径前添加 /private
:
'module_listener_options' => array(
'module_paths' => array(
'./private/module',
'./private/vendor',
),
),
这将使您的应用再次 运行。现在您可以将 ZF2 应用程序部署到共享的 Web 主机并保留干净的项目结构。