用于本地开发的 Apache 单一动态虚拟主机配置

Posted

技术标签:

【中文标题】用于本地开发的 Apache 单一动态虚拟主机配置【英文标题】:Apache single dynamic virtualhost configuration for local development 【发布时间】:2012-08-15 18:34:08 【问题描述】:

我正在我的本地笔记本电脑(ubuntu 12.04)上配置我的开发环境,并且遇到了一些问题来实现我想要的,我是 apache 配置的初学者。

我创建了一个主项目目录,我想根据我的文件夹层次结构为我的所有项目设置一个单个动态虚拟主机

这是我使用的文件夹层次结构:

主项目目录(包含所有项目): 客户1 项目1 public(项目根目录) 项目2 公开 更多项目... 客户2 项目1 公开 更多客户...

要访问一个项目,我使用以下网址: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 配置的初学者)

谢谢。

【问题讨论】:

【参考方案1】:

我做到了!

首先,我们需要启用两个模组:mod_vhost_alias 和 mod_rewrite

sudo a2enmod vhost_alias
sudo a2enmod rewrite

1] 在 /etc/apache2/sites-available 中创建一个新的虚拟主机,我将其命名为 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

希望对您有所帮助。如果有人有改进此配置的建议,我很乐意。 谢谢

【讨论】:

以上是关于用于本地开发的 Apache 单一动态虚拟主机配置的主要内容,如果未能解决你的问题,请参考以下文章

win7下配置Apache本地虚拟主机

具有动态 apache 虚拟主机的非通配符证书

如何为开发环境配置 vhosts/apache 子域?

Apache配置虚拟域名

Windows虚拟目录配置帮助上的apache

使用 apache config 和 htaccess 为开发和生产动态设置配置变量