场景:
比如访问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 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、其他
我是怎么搞出来的
作为找前辈的一名老师,当然是须要站在一堆复制粘贴博主的肩膀上,想出来的。
首先,想找到写好的方案,基本都出错有问题。
接着,查到泛域名解析
接着,查到别名
接着,自己剖析重写规则
末了,剖析别人的重写规则,写出这个规则
总结:
难道你们抄代码的时候,真的测试通过了吗?
而你们整出来的,真就那么
写了教程,难道百度真的是瞎吗?
其他问题请下头评论吧