在VPS上安装ZF2 Apache无需创建虚拟主机

时间:2016-06-11 21:22:31

标签: php apache .htaccess zend-framework2

我想在不支持Virtual Host的VPS服务器上安装我的ZF2应用程序。我正在使用一个基于ZendApplicationSkeleton的简单应用程序。

我使用默认的.htaccess

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]

我在SO中找到的所有解决方案对我都不起作用。它们可能适合ZF1,但不适合ZF2:

Link 1

Link 2

Link 3

Link 4

我的应用程序位于名为/var/www/html/testapp的文件夹中。

在浏览器中输入localhost/testapp/public后,将加载主页面。如果我输入localhost/testapp/module,我的模块也会加载,但导航不起作用。

即:在主页面中,我创建了一个按钮,如:

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

但如果点击它,我会导航到显示localhost/login/index的{​​{1}},而不是正确的Not Found页面。

帮助赞赏。

1 个答案:

答案 0 :(得分:1)

您的问题与服务器配置无关。由于您的应用位于子文件夹中,因此链接错误。它需要像

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

让它发挥作用。但是,public/不应出现在您的网址中。通过这种方式设置事物,您允许用户查看应用程序的Web根目录之外的文件,这是一种潜在的安全风险(并导致丑陋的URL)。

解决方案是为您的ZF2应用程序设置一个单独的虚拟主机,其中有一个指向应用程序公共文件夹的DOCUMENT ROOT。如果您遇到此问题,请将其作为您的问题发布;或者如果你能解释为什么这是不可能的,也许我们可以进一步建议。