htaccess 一个主机多个独立网站

Timle.CN:专注 WordPress建站WordPress主题WordPress插件 分享,同时也关注各种 建站资源前端技巧免费资源IT互联网热点 。CTRL+D即可收藏本站,我们期待您的再次光临!

[文章目录]
文章导读

如果你的主机有1G的空间,可以绑定20个域名,只用来放一个网站会不会太浪费啦,那是肯定很浪费的。接下来我们来看看怎么通过htaccess,让不同域名绑定不同子目录,从而实现同一个主机建立多个独立网站。

htaccess 域名目录分配

.htacces 真的很强大,我们使用.htaccess写入特定规则,就可以一个空间放多个网站,让不同域名进入绑定不同的文件夹,以下范例:

比如我们要根目录中实现以下的域名绑定子目录结构:

|----.htaccess文件

|----blog目录(绑定域名timle.cn/www.timle.cn)

  |--------.htaccess文件

|----aaa目录(绑定域名aaa.com)

  |--------.htaccess文件

那么需要在网站根目录的.htaccess文件中添加以下内容:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?timle\.cn$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ blog/$1
RewriteRule ^(/)?$ blog/index.php [L]

这样我们就已经把www.timle.cn这个域名绑定到了blog这个子目录上面,相当于blog就是一个独立域名主机服务器。aaa.com同理。

但是如果只到这里,你会发现,当你通过aaa.com/blog/的方式也可以访问www.timle.cn里面的内容,这当然是我们不想看到的。也不利于seo。怎么样来防止其他域名访问www.timle.cn中的内容呢?接下来看下面

htaccess 禁止域名互相访问

blog目录中的.htaccess文件中添加以下内容:

RewriteEngine On
# 禁止通过非本网站域名访问
RewriteCond %{HTTP_HOST} !^(www.)?timle.cn$ [NC]
RewriteRule ^.*$ [L,r=404]

通过以上两个步骤,我们已经成功的实现了域名timle.cn绑定到blog子目录中,aaa.com同理,并且域名与域名间相互独立访问。

如果绑定多个域名到子目录,那么规则以此类推以上内容后重复即可!

亲自测试,正常可用!需要子目录绑定的空间推荐此办法!

htaccess 文件代码解释

  • 【RewriteEngine On】
    表示重写引擎开,关闭off,作用就是方便的开启或关闭以下的语句,这样就不需要一条一条的注释语句了。
  • 【RewriteCond %{HTTP_HOST} ^(www\.)?timle\.cn$ [NC]】
    表示重写条件,前面%{HTTP_HOST}表示当前访问的网址,只是指前缀部分,格式是www.timle.cn不包括“http://”和“/”,^表 示字符串开始,$表示字符串结尾,\.表示转义的. ,如果不转义也行,推荐转义,防止有些服务器不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是如果访问的网址是timle.cn或者 www.timle.cn就执行以下的语句,不符合就跳过。还有,不能保证每个人输入的网址都是小写的,如果输入大写的呢,linux系统是区分大小写的,所以应该在RewriteCond后添加[NC]忽略大小写的。
  • 【RewriteCond %{REQUEST_URI} !^/blog/】
    也是重写条件,%{REQUEST_URI}表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”,!表示非,这句语句表示访问的地址不以/blog/开头,只是开头^,没有结尾$
  • 【RewriteCond %{REQUEST_FILENAME} !-f】
    【RewriteCond %{REQUEST_FILENAME} !-d】
    这两句语句的意思是请求的文件或路径是不存在的,如果文件或路径存在将返回已经存在的文件或路径
  • 【RewriteRule ^(.*)$ blog/$1】
    表示重写规则,最重要的部分,意思是当上面的RewriteCond条件都满足的时候,将会执行此重写规则,^(.*)$是一个正则表达的 匹配,匹配的是当前请求的URL,^(.*)$意思是匹配当前URL任意字符,.表示任意单个字符,*表示匹配0次或N次(N>0),后面 /blog/$1是重写成分,意思是将前面匹配的字符重写成/blog/$1,这个$1表示反向匹配,引用的是前面第一个圆括号的成分,即^(.*)$中 的.* 。

相关阅读:wordpress更换服务器到万网主机及备案    点击前往

版权声明:本站所有文章和资源使用CC BY-NC-SA 3.0 CN协议发布,转载应当以相同方式注明并注明文章来自“Timle.CN -> htaccess 一个主机多个独立网站”。在页面右边可以分享本文哦!

有 16 发吐槽 关于 “htaccess 一个主机多个独立网站

  1. 沙发
    鲜活 2015-05-30
    很详细的教程 .htaccess用法很强大
    • 回复
      Timle.CN 2015-06-1
      @鲜活 确实很强大,以前一直用的IIS的主机,最近换成linux的主机后才感觉他的强大
  2. 板凳
    Ksana 2015-07-14
    学习了
    • 回复
      Ksana 2015-07-14
      @Ksana 要是再写篇怎么两个站同一个数据库怎么弄就好了 :mrgreen:
      • 回复
        Timle.CN 2015-07-14
        @Ksana 不同的站同用一个数据库只需要修改数据库前缀就可以,比如你已经有了一个数据库以wp_开头的wordpress的网站,还想建一个,那再安装第二个wordpress网站到让你输入数据库账号和密码的哪里就要把数据库前缀改了,只要不和wp_一样,其他随便改什么都可以。
  3. 地板
    陌小雨博客 2015-09-15
    刚测试了下,为啥有一个域名后台登陆不进去呢?用户名和密码是对的,但点击就是没反应,也不提示密码错误
    • 回复
      Timle.CN 2015-09-15
      @陌小雨博客 用/wp-login.php来登录后台
      • 回复
        陌小雨博客 2015-09-15
        @Timle.CN 恩,可以了,不过好像上传图片出现错误,不知道是不是因为放在二级目录下的原因。
        • 回复
          Timle.CN 2015-09-15
          @陌小雨博客 不会出错,我现在的站就是放的二级目录,站是从一级转放到二级,什么都没改过,就添加了个htaccess规则。直接就可以用。
  4. 4楼
    雨刮器之家 2015-09-19
    出错了,咋弄呀,ftp找不到这个文件,自己新建了一个,上传上去,然后就不行了
  5. 5楼
    雨刮器之家 2015-09-19
    The requested URL /blog/[L,r=404] was not found on this server.
  6. 6楼
    雨刮器之家 2015-09-19
    怎么弄老大
  7. 7楼
    Yuriy 2016-03-5
    用这方式可行,但域名查看文章时会显示目录名出来如:www.aaaa.com 首页 我在但看文章时会显示 wwww.aaaa.com/目录名//2016/02-26/10.html
    • 回复
      Timle.CN 2016-03-5
      @Yuriy wordpress后台常规上设置WordPress地址(URL)和站点地址(URL)不要添加子目录地址,直接设置成wwww.aaaa.com
      • 回复
        Yuriy 2016-03-5
        @Timle.CN 谢谢,是我用的程序不支持这样的方式 :!: ,wordpress是可以 :smile: .
        • 回复
          Timle.CN 2016-03-7
          @Yuriy 这个主要是服务器支持,只要服务器支持一般都没有问题。
  8. 8楼
    toto 2016-04-20
    那个同理是什么意思?是1段代码2段代码1段代码2段代码的全复制吗?当然要做相应的修改。保存后,为毛我还是显示可以通过目录访问?而且两个域名指向的都是个设置的域名
  9. 9楼
    toto 2016-04-20
    原谅我发了两贴【RewriteCond %{HTTP_HOST} ^(www\.)?timle\.cn$ [NC]】就是这句不符合的也执行了 :arrow:
    • 回复
      Timle.CN 2016-04-21
      @toto 仔细看文中的介绍,第一段代码是放根目录,第二段放对应的文件夹目录,还有看下面的解释
      • 回复
        toto 2016-04-21
        @Timle.CN 谢谢神仙帮我疑惑 :oops: ,自己没有好好的看啊 :razz: 可还有一个问题【RewriteCond %{REQUEST_URI} !^/blog/】也是重写条件,%{REQUEST_URI}表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”,!表示非,这句语句表示访问的地址不以/blog/开头,只是开头^,没有结尾$我以bbb.com/blog/访问还是显示,和bbb.com访问的结果一致, 我不懂代码只能猜啊【RewriteCond %{REQUEST_URI} !^/blog/】的意思不是不允许以bbb.com/blog/的形式访问吗?
        • 回复
          Timle.CN 2016-04-21
          @toto 这段只是判断重写条件,判断你当前访问的链接,并没有在这里重写,意思是判断出所有不是直接目录路径链接访问。最后的【RewriteRule ^(.*)$ blog/$1】才是重写。
  10. 10楼
    小撸 2016-04-20
    谢谢好文。后台有音乐,这个体验相当不妙,不得不打点字吐槽一下。
  11. 11楼
    小撸 2016-04-20
    你这用的是阿里云的空间?速度好快呀!改天一定要用上阿里云的空间!
  12. 12楼
    小撸 2016-04-20
    后台的音乐无法关掉,鼠标指针也有个性,这有点霸道。反正我个人的感受是不好的。吐槽一下虽然难听,但是确实体验糟糕。
    • 回复
      Timle.CN 2016-04-21
      @小撸 额。。。 :arrow: 音乐那个还没搞好,确实不能关掉,改天在改进下吧
  13. 13楼
    小撸 2016-04-21
    tim,我给你的文章转载了,还做了一些修改,请看http://www.lulinux.com/archives/1224
    • 回复
      toto 2016-04-21
      @小撸 访问不了哦
      • 回复
        Timle.CN 2016-04-21
        @toto 你的站貌似除了首页其他页面都不能访问
        • 回复
          小撸 2016-04-22
          @Timle.CN 如果不是你的提醒,我还不知道呢!原来是.htaccess文件丢失!谢谢提醒哦!已经修复了!

疑问 难过 胜利 微笑 抠鼻 可爱 抓狂 偷笑 奋斗 衰 撇嘴 色 贼笑 爬虫 鼓掌 发怒 擦汗 握手 酷 玫瑰 哭 呲牙

htaccess 一个主机多个独立网站
13 票, 4.54 平均等级 ( 91% 分 )