我想在不支持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:
我的应用程序位于名为/var/www/html/testapp
的文件夹中。
在浏览器中输入localhost/testapp/public
后,将加载主页面。如果我输入localhost/testapp/module
,我的模块也会加载,但导航不起作用。
即:在主页面中,我创建了一个按钮,如:
<a href="/module/index">Go To Module</a>
但如果点击它,我会导航到显示localhost/login/index
的{{1}},而不是正确的Not Found
页面。
帮助赞赏。
答案 0 :(得分:1)
您的问题与服务器配置无关。由于您的应用位于子文件夹中,因此链接错误。它需要像
<a href="/testapp/public/module/index">Go To Module</a>
让它发挥作用。但是,public/
不应出现在您的网址中。通过这种方式设置事物,您允许用户查看应用程序的Web根目录之外的文件,这是一种潜在的安全风险(并导致丑陋的URL)。
解决方案是为您的ZF2应用程序设置一个单独的虚拟主机,其中有一个指向应用程序公共文件夹的DOCUMENT ROOT。如果您遇到此问题,请将其作为您的问题发布;或者如果你能解释为什么这是不可能的,也许我们可以进一步建议。