[英]Running a ZendFramework project inside a subdirectory
我有一个ZendFramework项目,我想在子目录中运行。
目前,我的文档根目录位于/ var / www ,项目位于/ var / www / project , 项目目录中包含各种文件夹( controllers , public等等)。
我正在尝试将所有来自http:// webserver / project / *的请求传递到/var/www/project/public/index.php文件。 但是,尝试在/var/www/project/.htaccess中使用以下代码传递所有请求不起作用:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /project/public/index.php [NC,L]
在/ var / www / project / public中还有一个.htaccess
文件,其中包含完全相同的代码,但是在加载/ project URL时,仅显示了项目内容的目录索引。
我知道这是一个古老的问题,问问者早就知道了他的问题,但我只是遇到了这个问题。 这是我找到的最简单的解决方案,希望到达这里的其他任何人都可以看到。
在您的VirtualHost文件中,只需在标签上添加一个Alias权限即可创建一个VirtualHost文件,如下所示
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /home/user/example.com/public_html/
ErrorLog /home/user/example.com/logs/error.log
CustomLog /home/user/example.com/logs/access.log combined
Alias /zend/albums /home/user/example.com/zf2-tutorial/public
<Directory /home/user/example.com/public_html>
AllowOverride All
Header set Access-Control-Allow-Origin: "http://localhost"
</Directory>
</VirtualHost>
编辑:刚发现您将必须编辑.htaccess(在公共目录中)以包括此行(与上面的示例一起进行):
RewriteBase /zend/albums
这是Phil的一个很好的答案,类似于我的,但是他完全删除了.htaccess文件,而是将规则放入VirtualHosts文件中。 https://stackoverflow.com/a/7563414/1031714
我将项目与文档根完全分开存储,例如/home/user/projects/project
。
然后,只需将/var/www/project
符号链接到/home/user/projects/project/public
。
如果您对任何静态资产链接(JavaScript,图像,CSS等)使用BaseUrl视图帮助器,它应该可以正常工作。
编辑 :另一个建议是将您的公共目录与应用程序的其余部分分开。
例如,假设您的项目位于/home/user/projects/project
,将public
目录的内容移至/var/www/project
并使用以下命令编辑index.php
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', '/home/user/projects/project/application');
删除第一个RewriteRule:表示将所有地址重写为空( -
)并停止( [L]
标志)。
编辑:这应该符合您的需求
RewriteCond %{REQUEST_FILENAME} !project/public/.*
RewriteRule ^project/(.*)$ project/public/$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /project/public/index.php [NC,L]
这会将对项目/不包含公共/的任何请求重写为对项目/公共/的请求。 下一个将任何调用重定向到同一目录中不存在的文件或目录到index.php。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.