1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > html站点根目录怎么改 通过重定向把子目录设置为网站根目录

html站点根目录怎么改 通过重定向把子目录设置为网站根目录

时间:2019-03-23 13:05:55

相关推荐

html站点根目录怎么改 通过重定向把子目录设置为网站根目录

摘要:如果想在一个项目内对于不同的文件夹使用不同的域名来访问,我们需要把这些文件夹单独设置成根目录并绑定域名,但对于虚拟服务器用户来说,这并不容易实现,因为一般的虚拟服务器是没有这样的功能的,但我们可以通过一些配置文件来实现。那么本文就来分享下apache虚拟服务器实现把子目录设置为根目录。

以前也写过一篇关于把子目录设置成网站根目录的文章,不过那个方法并不完善。前不久做微信公众号的开发又重新研究了一下域名的重定向,总算找到了一种完善的把子目录设置成功根目录的方法。

在分享把子目录设置成目录设置成根目录的方法前,先来简单的介绍下重定向,重定向分为内部重定向和外部重定向。

外部重定,比如现在在浏览器访问 A 链接,当页面完全加载完成后,浏览器的地址栏显示的是 B 链接,例如 我们访问 ,但最后浏览器的地址栏显示的是 。这就是外部重定向。

内部重定向,最长见的就是伪静态。当我们访问一个伪静态链接的时候,会在服务器内部解析,然后根据内部规则把内容展现出来,但浏览器的 访问链接始终都没有变。伪静态 的页面内容实际上是动态内容,因为在服务器按照链接来查找是找不到对应的静态页面的。

介绍完重定向,下面就来实现如何把子目录设置成根目录

主目录对应的域名:,主目录下有个index.html文件,内容为 index index

主目录下的子目录 bj:最终目的实现访问 /bj/变成 ,而且显示的是子目录 bj 下对应的内容,子目录下有个index.html 文件,内容为 bj/index

服务器环境:Apache2.4,开启了rewrite模块(一般的apache虚拟服务器都会默认开启这个模块)

域名解析绑定:和 都绑定在主目录上

apache的虚拟服务器的重定向都是通过 .htaccess 文件来实现的,所以我们需要在主目录和 bj 目录下都放置一个.htaccess 配置文件。

在设置前我们先来访问下两个域名:

/index.html (显示的是主目录index.html文件内容)

/bj/index.html(显示的是bj目录下的index.html文件内容,但url 不是我们希望看到的)

主目录下的 .htaccess 文件配置内容RewriteEngineOn

RewriteBase/

RewriteCond%{HTTP_HOST}^$[NC]

RewriteRule^(.*)$bj/$1[QSA,L]

RewriteEngineOn : 开启 url 重写

RewriteBase :基准路径,默认 “/” 即可,表示当前目录下;

RewriteCond :重写条件;

%{HTTP_HOST}^$[NC] :重写条件内容,%{HTTP_HOST} 这个是系统默认变量,表示当前访问的域名,[NC] 表示忽略大小写,^$ 正则匹配条件

这一句的完整意思就是 如果当前访问的域名是 就继续进行下一句匹配;

%{REQUEST_URI} :当前访问的路径,不包括域名,相当于 php中系统变量 $_SERVER['REQUEST_URI'],

RewriteCond%{REQUEST_URI}!^/bj/ 这句的意思是当前访问的路径不是以/bj/ 开头

RewriteRule^(.*)$bj/$1[QSA,L]: url 重写规则,这里用的是内部重定向 ;

QSA:保证url中的参数不分布被截断,如果不加这个,在url重写时,url中的特殊符号后的参数部分会被截断

下面用个例子具体分析,例如:/index.html

1、域名是 , 满足条件RewriteCond%{HTTP_HOST}^$[NC]

2、REQUEST_URI 的值是/index.html,不是以 /bj 开头,满足条件 RewriteCond%{REQUEST_URI}!^/bj/

3、此时 index.html 就是url重写规则中的 .* ,规则中的 $1 对应的是 .* 因此,此时的重写url规则是RewriteRule index.html bj/index.html,基准目录是当前目录,所以bj/index.html 会在当前目录下找bj目录下的 index.html 文件

而 bj/index.html文件的内容为:bj/index

所以在浏览器访问/index.html时,浏览器显示的内容应该是 bj/index,如下图所示:内容变成了 bj/index ,说明访问的是bj目录下的内容,域名的访问已经达到我们要的效果了。

接下来配置bj目录下的 .htaccess 文件RewriteEngineOn

RewriteBase/

RewriteCond%{HTTP_HOST}^$[NC]

RewriteCond%{REQUEST_URI}^/bj/

RewriteRule^(.*)$/$1[QSA,R=301]

bj子目录的.htaccess的配置就不详细解释了,这里只说一点,如果用 去访问bj子目录,我们希望在浏览器看到的是 ,而不是 ,很明显url变了,因此子目录要配置的是外部重定向: [R=301] 表示301从定向,如果不加 [R=301],因为url规则总用了完整的url 所以会默认302外部重定向,而302重定向对seo是不友好的,所以这里设置成301重定向。

下面来看看访问 /bj/index.html的实际效果:(从图中可以看到,访问路径中的域名变成了,而页面显示的内容 bj/index 也是子目录bj下的index,html文件的内)

子目录设置根目录就完成了,是不很简单,很好理解。而且把这个理解透了,不仅可以把主域名下的一级子目录设置成根目录,甚至还能对更深层的子目录设置成根目录。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。