#可直接看最后的解决方案(找前辈网发布并测试通过)

场景:

比如访问xxx.abc.com,则自动获取www.abc.com/xxx相关页面

且需要不重启apache,需要多少二级域名,自动生效。

网上参考方案:

参考1:https://www.oschina.net/question/149143_2274346(不生效)

主要代码:

RewriteCond %{HTTP_HOST} !^www.xxxxxx.com$ RewriteCond %{HTTP_HOST} !^m.xxxxxx.com$ RewriteCond %{HTTP_HOST} ^(.*).xxxxxx.com$ RewriteCond %{REQUEST_URI} !^/%1/ RewriteRule ^(.*)?$ /%1/$1

参考2:https://bbs.csdn.net/topics/350153809(不生效)

主要代码:

a、

rewriteengine on rewritecond %{HTTP_HOST} [^.] \.域名\.com$ rewriterule ^(. )$ %{HTTP_HOST}$1 [C] rewriterule ^([^.] )\.域名\.com(.*)$ /$1$2

b、

RewriteEngine On RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9] )\.域名\.com$ RewriteCond %{REQUEST_URI} !^/[a-zA-Z0-9]/ RewriteRule ^(.*)$ /%1/$1 [L]

c、

RewriteCond %{HTTP_HOST} ^www.xxx.com:8080$ RewriteRule ^/?$ /index.html RewriteCond %{HTTP_HOST} ^[a-zA-Z0-9] \.xxx.com:8080$ RewriteRule ^/?$ /%{HTTP_HOST} RewriteRule ^/([a-zA-Z0-9] )\.xxx\.com:8080/?$ /$1/index.jsp RewriteCond %{HTTP_HOST} ^[a-zA-Z0-9] \.xxx.com:8080/^[a-zA-Z0-9] \.jsp$ RewriteRule ^/?$ /%{HTTP_HOST} RewriteRule ^/([a-zA-Z0-9] )\.xxx\.com:8080/^(.*)?$ /$1/$3\.jsp [L]

apache官方文档:

https://httpd.apache.org/docs/2.4/rewrite/vhosts.html(看不太懂,测试也并不可行)

Setup automatic per-folder subdomains on your local linux based computer,经过测试,完全可行。但是要额外启用vhost_alias模块(看不太懂,没测试)

Redirecting subdomains to directories in apache,这应该是最接近我本意的解决方案了,但是没搞成功,但是看起来挺靠谱的(看不太懂,没测试)

最后给出真正的方案:

准备:

本方案基于centos 6.4

1、host文件夹->www.xxx.cn

2、abc文件夹->abc.host.xxx.cn

具体方案:

1、你需要做泛域名解析

原因:没有泛域名解析,那么你搞的二级域名根本就没法在公网上访问。

方法:在域名解析出,添加*指向你的主机

2、你需要做别名(泛)

原因:你不在apache上做别名,那么apache根本就得不到你的访问请求,或者说对于你的二级域名访问根本无法定位文件夹。

方法:直接贴代码

<VirtualHost *:80> DocumentRoot "/usr/www/host" ServerAlias *.host.xxx.cn <Directory "/usr/www/host"> AllowOverride all Order allow,deny allow from all </Directory> </VirtualHost>

3、打开httpd.conf的别名、重写等模块,开启AllowOverride all

上边做好了,需要重启httpd,centos 6.4的重启方法是service httpd restart

4、重写规则

这儿网上给了一大堆方案,实际能用的,至少在百度上找前辈网没发现。

代码如下:

RewriteEngine On #先适配域名是否有XXX.host.xxx.cn这种形态 RewriteCond %{HTTP_HOST} ([a-z]{3,20})\.host\.xxx\.cn #再把适配完域名后边的部分给适配出来 RewriteCond %{REQUEST_URI} !/([a-z]{3,20})/(.*) #找前辈网提醒你,%1指的是第三行([a-z0-9]{3,20})中的内容 #$1指的是rule中(.*),中的所有 #整个的意思 RewriteRule ^(.*)$ /$1/%1

保存为.htaccess放在host文件夹下

最终效果:

访问abc.host.xxx.cn会直接调用 abc.host.xxx.cn/abc下的

需要解决的问题:

1、禁止用户用子目录方式访问,访问则跳转到二级域名

2、其他

我是怎么搞出来的

作为找前辈的一名老师,当然是需要站在一堆复制粘贴博主的肩膀上,想出来的。

首先,想找到写好的方案,基本都出错有问题。

接着,查到泛域名解析

接着,查到别名

接着,自己分析重写规则

最后,分析别人的重写规则,写出这个规则

总结:

难道你们抄代码的时候,真的测试通过了吗?

而你们整出来的,真就那么懒不写个教程吗?

写了教程,难道百度真的是瞎吗?

其他问题请下头评论吧

域名解析怎么把端口写进去(批量二级域名自动访问子目录)(1)

,