我正在本地笔记本电脑(ubuntu 12.04)上配置我的开发环境,在实现我想要的目标方面遇到了一些问题,我是apache配置的初学者。
我创建了一个主项目目录,我想根据我的文件夹层次结构为我的所有项目设置一个单个动态虚拟主机。
这是我使用的文件夹层次结构:
- 项目主目录(包含所有项目):
- 客户1
- 项目1
- public(项目根目录)
- 项目2
- 公众
- 更多项目
- 项目1
- 客户2
- 项目1
- 公众
- 项目1
- 更多客户
- 客户1
要访问项目,我使用以下URL:customer1.project1.dev、customer1.project2.dev、customer2.project1.dev。。。我读过一些关于虚拟主机配置的文章,其中谈到了在rootdirectory参数中使用url的部分,比如:/home/user/mainprojectdirectory/%1/%2/public所以我开始尝试这个基础:
<VirtualHost *.dev>
DocumentRoot /home/user/mainprojectdirectory/%1/%2/public
ServerName %1.%2.dev
</VirtualHost>
但我做不到。我走对了吗?我应该采取哪些步骤来实现我想要的目标?我应该编辑哪个文件?欢迎各界提出意见!(记住我是apache配置的初学者)
谢谢。
首先,我们需要启用两个mod:mod_vhost_alias和mod_rewrite
sudo a2enmod vhost_alias
sudo a2enmod rewrite
1] 在/etc/apache2/可用的站点中创建一个新的虚拟主机,我将其命名为zzz-dev
<VirtualHost *:80>
#All requests ending with .dev will use this virtualhost
ServerName dev
ServerAlias *.dev
# Get server name of header Host:
UseCanonicalName Off
# Interpret the request url to find the right project folder. Ex: For customer1.project1.dev, %1 is the first part (here: customer1), %2 the second part (here: project1), so the folder for this url is /home/victor/takative/projets/customer1/project1/public
VirtualDocumentRoot /home/user/mainprojectdirectory/%1/%2/public
# Fix for missing $SERVER['DOCUMENT_ROOT'] while using VirtualDocumentRoot, the setDocumentRoot.php file will be added autmatically to set the variable
php_admin_value auto_prepend_file /home/lib/utils/setDocumentRoot.php
RewriteEngine On
RewriteOptions Inherit
<DirectoryMatch "/home/user/mainprojectdirectory/.*">
IndexOptions +FancyIndexing NameWidth=*
Options Includes FollowSymLinks Indexes
AllowOverride All
Order allow,deny
Allow from all
</DirectoryMatch>
</VirtualHost>
以下是setDocumentroot.php的内容:
<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '',$_SERVER['SCRIPT_FILENAME']);
?>
2] 启用新的虚拟主机:
sudo a2ensite zzz-dev
3] 重新加载apache:
sudo service apache2 reload
4] 现在,要创建一个项目,您只需按照上面的文件夹层次结构编辑/etc/hosts文件,行如下:
127.0.0.1 customer1.project1.dev
希望能有所帮助。如果有人建议改进这个配置,我很乐意。感谢