我有一个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 网址时我刚刚看到了项目内容的目录索引。
答案 0 :(得分:0)
我将项目完全独立于文档根目录,例如/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');
答案 1 :(得分:0)
我知道这是一个古老的问题,提问者很早就发现了他的问题,但我只是碰到了它。这是我发现的最简单的解决方案,希望其他任何人到这里都会看到这个。
在您的VirtualHost文件中,只需添加一个关于标记的别名即可创建像这样的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
这是菲尔的一个非常好的答案,它与我的相似,但他完全删除了他的.htaccess文件,而是将规则放在VirtualHosts文件中。 https://stackoverflow.com/a/7563414/1031714
答案 2 :(得分:-1)
删除第一个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]
这会重写项目/不包含public / to project / public /的任何请求。 下一个将任何对非现有文件或dir的调用重定向到同一目录中的index.php。