AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 47861
In Process
Unkwntech
Unkwntech
Asked: 2009-07-30 17:54:22 +0800 CST2009-07-30 17:54:22 +0800 CST 2009-07-30 17:54:22 +0800 CST

Apache 没有从预期的地方提供文件

  • 772

我有以下虚拟主机配置:

<VirtualHost *>
    ServerName books.domain.com
    ServerAlias ebooks.domain.com
    DocumentRoot /home/media/books/
    <Directory /home/media/books>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /home/domain.com/logs/error.log
    CustomLog /home/domain.com/logs/access.log combine
    ServerSignature Off
</VirtualHost>
<VirtualHost *>
    ServerName domain.com
    ServerAlias domain.info domain.net domain.org *.domain.com *.domain.info *.domain.net *.domain.org
    DocumentRoot /home/domain.com/public_html/
    <Directory /home/domain.com/public_html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /home/domain.com/logs/error.log
    CustomLog /home/domain.com/logs/access.log combine
    ServerSignature Off
</VirtualHost>

domain.com 在两个虚拟主机指令中都是相同的

问题是books.domain.com 是从/home/domain.com/public_html/目录提供的

apache-2.2
  • 5 5 个回答
  • 196 Views

5 个回答

  • Voted
  1. Evgeny
    2009-07-30T18:03:32+08:002009-07-30T18:03:32+08:00

    也许是因为你有 domain.com 的 ServerAlias 规则

    *.domain.com
    

    这将匹配 ebooks.domain.com 并从

    /home/domain.com/public_html

    我最好的建议是使用 mod_rewrite ,RewriteCond %{HTTP_HOST}但不幸的是我没有足够的知识来给你更多的细节。看看 mod_rewrite 手册/指南。

    • 1
  2. theotherreceive
    2009-07-30T19:23:15+08:002009-07-30T19:23:15+08:00

    我原以为顺序是这里的关键,apache 将提供第一个匹配的服务器名,但我做了一个快速测试,但似乎并非如此。它似乎总是匹配通配符,不管它们的顺序是什么。

    我能想到的最好的一个 IP 地址几乎就是 Evgeny 所建议的,拥有一个虚拟主机并为 books.domain 使用代理重定向。

    <VirtualHost *>
        ServerName domain.com
        ServerAlias domain.info domain.net domain.org *.domain.com *.domain.info *.domain.net *.domain.org
        DocumentRoot /home/domain.com/public_html/
        <Directory /home/domain.com/public_html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
        ErrorLog /home/domain.com/logs/error.log
        CustomLog /home/domain.com/logs/access.log combine
        ServerSignature Off
    
        <Directory /home/media/books>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
    
        Alias /home/media/books /books
        RewriteRule   ^books\.domain\.com(.*)$      http://domain.com/books$1 [NC,P,L]
        RewriteRule   ^ebooks\.domain\.com(.*)$     http://domain.com/books$1 [NC,P,L]
    
    </VirtualHost>
    

    我能想到的保留通配符和单独的虚拟主机的唯一方法是,如果您有两个 IP 地址,并将这两个虚拟主机分配给单独的地址。我仍然觉得必须有更好的方法来做到这一点,但会对其他解决方案感兴趣。

    • 1
  3. Sam
    2009-11-23T02:37:45+08:002009-11-23T02:37:45+08:00

    我认为 Evgeny 做到了。

    很高兴知道:NameVirtualHost 指令的值必须与内容完全匹配,并且都不应该是主机名。例如,NameVirtualHost *:80 必须与 . “NameVirtualHost *:80”在配置中只能出现一次。

    • 1
  4. DisabledLeopard
    2009-07-30T19:30:15+08:002009-07-30T19:30:15+08:00

    正如 Evgeny 所指出的,books.domain.com 是从 public_html 提供的,因为这正是 VirtualHosts 所说的......您的第一个 VirtualHost ServerAlias 是从 /home/media/books 提供的 ebooks.domain.com。确保 *.domain.com 始终位于最后一个 VirtualHost [您拥有的] 中,只要某些前面的 VirtualHost 具有与您输入的域匹配的 ServerAlias,VirtualHost 将提供响应。

    如果您正在寻找更完整的通配符解决方案,并且您可以重新排列目录结构,例如 /home/media/books、home/media/ebooks 等,那么尝试这样的操作并在单个 VirtualHost 中处理所有内容:

    DocumentRoot /home/media #make sure you have a default index page 
    RewriteEngine on 
    RewriteCond %{SERVER_NAME} ^(.*).domain.com [NC] # make sure this is a subdomain call 
    RewriteCond /%1/ -d # is there a directory for this subdomain 
    RewriteRule ^/(.*)$ /%1/ # request filename now /home/media/%1 - client URL unchanged.
    
    • 0
  5. Thomas
    2009-07-30T22:24:06+08:002009-07-30T22:24:06+08:00

    您是否有“NameVirtualHost *:80”或类似的全局配置行?

    当虚拟主机在 Apache 中不起作用时,这通常是错误的。

    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve