场景:

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

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

jsprewrite批量二级域名主动拜访子目次  apache重写rewrite CSS

网上参考方案:

参考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 onrewritecond %{HTTP_HOST} [^.]+\.域名\.com$rewriterule ^(.+)$ %{HTTP_HOST}$1 [C]rewriterule ^([^.]+)\.域名\.com(.)$ /$1$2

b、

RewriteEngine OnRewriteCond %{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、其他

我是怎么搞出来的

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

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

接着,查到泛域名解析

接着,查到别名

接着,自己剖析重写规则

末了,剖析别人的重写规则,写出这个规则

总结:

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

而你们整出来的,真就那么

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

其他问题请下头评论吧