gpt4 book ai didi

apache - Apache httpd-vhosts.conf和.htacces(XAMPP)中的动态虚拟主机自动化

转载 作者:行者123 更新时间:2023-12-04 23:24:25 25 4
gpt4 key购买 nike

我正在尝试在本地开发机器上设置一些自动化功能。通常我会像这样开始我所有的项目

打开主机文件,设置DNS条目,例如127.0.0.1 example.com www.example.com
打开httpd-vhosts.conf文件并添加一个条目,如下所示

<VirtualHost *>
DocumentRoot "/path/to/xampp/htdocs/example.com"
ServerName example.com
ServerAlias www.example.com
</VirtualHost>


我要实现的目的是以这样一种方式设置环境,即每次我想在新主机上工作时,都不必在 httpd-vhosts.conf中添加此条目。

而是我想在 httpd-vhosts.conf中有一个全局条目,该条目可以处理所有域并将它们映射到各自的目录

所以如果我在 hosts文件中有这样的记录列表,

127.0.0.1 example.com
127.0.0.1 mysite.com
127.0.0.1 google.com
127.0.0.1 abc.com


和这样的文件夹结构

/htdocs/
/example.com/
/mysite.com/
/google.com/
/abc.com/


它应该自动映射到那些目录,而无需在 VirtualHost文件中添加 httpd-vhosts.conf记录。

我可以猜测,可以通过在 httpd-vhosts.conf中添加通配符条目(我不知道如何),然后在 .htaccess中放置的 /htdocs/文件中添加一些重定向规则以将其映射到其目录中来实现。

所以最终


如何在 httpd-vhosts.conf中设置通配符条目
如何在 .htaccess/htdocs/文件中设置确切的重写规则


我想到了这一点,也许还有更好的方法可以做到这一点。

最佳答案

1.如何在httpd-vhosts.conf中设置通配符条目

通过在域名前面放置一个星号(*),通常将www

<VirtualHost *>
DocumentRoot "/path/to/xampp/htdocs/example.com"
ServerName example.com

ServerAlias *.example.com

</VirtualHost>


2.如何在/ htdocs /中的.htaccess文件中设置确切的重写规则

RewriteEngine On
#RewriteCond %{HTTP_HOST} ^!example.com #(optional) do not redirect base domain
RewriteCond %{HTTP_HOST} (?(?=[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$).+|[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,})$
RewriteRule ^$ http://localhost/%0


所有这些域:

www.example.com
img.example.com
cdn.example.com
static.img.example.com


将被重定向到 /example.com

说明

从本质上讲,上面的操作是将最后两个字符串用句号分隔,然后将您重定向到新找到的文件夹。



从技术角度来看:

此正则表达式使用 if then|else模式。如果找到 1,则执行 2,否则执行 3

进行测试,然后根据文本 (?(?=[a-z0-9-_]+.[a-z0-9-_]{2,}$).+|[a-z0-9-_]+.[a-z0-9-_]{2,}$)的结果使用两个选项之一


(IF)断言可以从此位置开始匹配正则表达式(正向超前) (?=[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$)

匹配 [a-z0-9\-\_]+下列表中存在的单个字符

在一次和无限制的时间之间,尽可能地多次,根据需要进行回馈(贪婪) +
在“ a”和“ z”之间的字符 a-z
介于“ 0”和“ 9”之间的字符 0-9
A-字符 \-
_个字符 \_


匹配字符“。”字面上 \.
匹配 [a-z0-9\-\_]{2,}下列表中存在的单个字符

在2次到无限制的时间之间,尽可能地多次,根据需要进行回馈(贪婪) {2,}
在“ a”和“ z”之间的字符 a-z
介于“ 0”和“ 9”之间的字符 0-9
A-字符 \-
_个字符 \_


在字符串结尾处声明位置(或在字符串结尾处的换行符之前,如果有的话) $


(THEN)如果测试成功,则匹配 .+下的正则表达式

匹配不是换行符 .+的任何单个字符
在一次和无限制的时间之间,尽可能多次,根据需要进行回馈(贪婪) +


(ELSE)如果测试失败,则如果测试成功,则匹配下面的正则表达式 [a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$

匹配 [a-z0-9\-\_]+下列表中存在的单个字符
在一次和无限制的时间之间,尽可能多次,根据需要进行回馈(贪婪) +
在“ a”和“ z”之间的字符 a-z
介于“ 0”和“ 9”之间的字符 0-9
A-字符 \-
_个字符 \_
匹配字符“。”字面上 \.
匹配 [a-z0-9\-\_]{2,}下列表中存在的单个字符
在2次到无限制的时间之间,尽可能地多次,根据需要返回(贪婪) {2,}
在“ a”和“ z”之间的字符 a-z
介于“ 0”和“ 9”之间的字符 0-9
A-字符 \-
_个字符 \_


在字符串结尾处声明位置(或在字符串结尾处的换行符之前,如果有的话) $




测试套件:

a.bc
ab.cd
abc.def
ab.cd.ef
12.34
12.34.56
1.2.3.4.5.67
cnn.com
no_country.for.old.men

关于apache - Apache httpd-vhosts.conf和.htacces(XAMPP)中的动态虚拟主机自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com