V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Nekonico
V2EX  ›  问与答

搞了个虚拟主机,只支持单站点,有办法不同域名主页指向不同目录吗

  •  
  •   Nekonico · 2020-02-07 23:48:23 +08:00 · 1816 次点击
    这是一个创建于 1749 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞了个虚拟主机,貌似可以绑定无数个域名,但是域名统统只能指向根目录


    正常情况下

    a.test.com -> wwwroot/ (index.php

    b.test.com -> wwwroot/ (index.php

    ……

    现在想

    a.test.com -> wwwroot/a/ (index.php

    b.test.com -> wwwroot/b/ (index.php

    ……


    • 服务器用的是 Apache,可以设置伪静态(.htaccess 文件),但是不能设置其他参数
    • 服务器可以用 PHP7.1

    子目录内可能还会有孙子目录。

    我在百度上查阅相关资料,发现他们的实现方式把孙子目录写死了。

    https://www.cnblogs.com/crxis/archive/2017/06/11/6984618.html

    会出现如下问题:

    如果访问

    a.test.com/sunzi

    需要指向 wwwroot/a/sunzi/ (index.php

    然而按照上面的方法并没有成功实现

    即使能成功实现。。假如

    wwwroot/a/* 里面有很多个孙子目录

    需要一个一个地添加进 .htaccess,实在太麻烦了


    不过我按照上面的资料,成功弄了单级的子目录

    也就是成功通过 a.test.com 访问了 wwwroot/a/ (index.php

    然而,php 里面使用了 wwwroot/a/class 里的东西,貌似并不能正常地加载出来。。


    由于我之前一般用的 Nginx,对 Apache 不熟悉。有没有 dalao 能给条明路?


    另一种思路是直接首页放个 index.php

    即 wwwroot/index.php

    这里面用来判断当前访问的域名,并返回域名对应的子目录

    这个思路的话有没有 dalao 帮我写下实现下。。不知道可行性如何

    第 1 条附言  ·  2020-02-08 16:37:41 +08:00

    已解决:

    RewriteEngine on
    #------- one.yourdomain.com/* -> /wwwroot/one/* -------
    RewriteCond %{HTTP_HOST} ^(one.)?yourdomain.com$
    RewriteCond %{REQUEST_URI} !^/one/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /one/$1
    RewriteCond %{HTTP_HOST} ^(one.)?yourdomain.com$
    RewriteRule ^(/)?$ one/ [L]
    #-----------------------------------------------------------------
    #------- two.yourdomain.com/* -> /wwwroot/two/* -------
    RewriteCond %{HTTP_HOST} ^(two.)?yourdomain.com$
    RewriteCond %{REQUEST_URI} !^/two/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /two/$1
    RewriteCond %{HTTP_HOST} ^(two.)?yourdomain.com$
    RewriteRule ^(/)?$ two/ [L]
    #-----------------------------------------------------------------
    

    把one/two替换成二级域名和目录名

    yourdomain.com 替换成你的域名

    可以正常访问 two.yourdomain.com/* 里的任何文件!

    还有我用的这个虚拟主机有个坑。。会自动拦截子目录里的文件。。。所以要加入白名单。。

    第 2 条附言  ·  2020-02-08 19:57:57 +08:00
    有些问题:
    子目录的 php 网站的 URL 会自动添加子目录。。


    访问 two.yourdomain.com

    其中有 url 指向 wwwroot/two/index.php?test

    期望 URL 为:two.yourdomain.com/index.php?test

    实际为:two.yourdomain.com/two/index.php?test



    目前无法解决这个问题。。。

    ---

    还有就是 SSL,这个主机也只能绑一个,这个只想到两种解决方式

    - 有泛解析证书
    - CDN

    ---

    所以目前放弃了
    5 条回复    2020-02-08 15:37:43 +08:00
    ysc3839
        1
    ysc3839  
       2020-02-08 01:43:57 +08:00 via Android   ❤️ 1
    CallMeReznov
        2
    CallMeReznov  
       2020-02-08 01:55:14 +08:00   ❤️ 1
    虚拟主机没有面板的吗?
    面板里支持多站点多域名绑定的一般
    zero3412
        3
    zero3412  
       2020-02-08 10:27:31 +08:00
    这,,,Apache,Nginx 不都可以域名绑定么
    搜索个 Apache 多虚拟机,网上好多教程啊
    opengps
        4
    opengps  
       2020-02-08 10:27:59 +08:00
    对于虚拟主机这种“强制要求”。我觉得你直接写代码控制更合适,主页里写代码控制某个域名跳某个目录,避免对发布环境产生依赖
    Nekonico
        5
    Nekonico  
    OP
       2020-02-08 15:37:43 +08:00
    @ysc3839 正是我想要的,感谢!


    @zero3412 虚拟主机不允许自行配置 Apache

    @CallMeReznov 这个虚拟主机里没有多站点,肯定是专门限制了

    @opengps 我先试试楼上的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3627 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:19 · PVG 18:19 · LAX 02:19 · JFK 05:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.