【发布时间】:2011-11-25 16:10:06
【问题描述】:
我在设置我的 httpd.conf 或 .htaccess 文件以识别一台服务器上的多个 zend 框架站点时遇到问题。
对于开发,我只有一台服务器,我正在尝试设置站点,以便我可以像 localhost/app1、localhost/app2 等一样访问它们。
所以现在,当我转到 localhost/app1 时,它确实成功重定向到 localhost/app1/public/index.php,但是当我转到 localhost/app1/index/index 时,我得到了 404。
这是我的虚拟主机文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "/var/www"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/app1/public">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>
这是我在 /var/www/app1 目录中的 .htaccess 文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ /app1/public/index.php [NC,R,L]
如果我将 vhosts 文件中的 DocumentRoot 行更改为 DocumentRoot "/var/www/app1/public",那么 app1 确实可以正常工作,但我只能在 http://localhost 访问那个...。这可能吗?我想要发生的是如果 /var/www 是文档根目录,那么如果我转到 localhost/app1,这些请求需要重定向到 localhost/app1/public/index.php,如果我转到 localhost/app2 这些请求需要重定向到 localhost/app2/public/index.php。
我希望我解释清楚了,感谢任何帮助。
最后
我最喜欢 Phil 的解决方案,因为我不想更改本地主机文件并使用 ServerName 指令。如果您为每个应用程序拥有一个单独的域名,但在开发环境中不是这样,那么在生产环境中就可以了。
除此之外,我在使用备用目录来提供 Web 内容时遇到了 403 禁止问题。正如我所说,perms 似乎是正确的,问题出在 SE_Linux 上,并且文件的安全上下文未设置为 httpd_sys_content_t。我发布了我发现here 的解决方案,因为它专门处理这个问题。谢谢。
【问题讨论】:
标签: apache zend-framework .htaccess