简体   繁体   English

无法使用httpd-vhosts.conf从子域重定向到子子域

[英]Cannot redirect to sub-subdomain from subdomain using httpd-vhosts.conf

I'm attempting to setup a local development server where I can simply access any project within a directory E:\\development\\projects\\ and have apache automatically redirect me to the correct subdomain. 我正在尝试设置本地开发服务器,在这里我可以直接访问目录E:\\development\\projects\\任何项目,并让apache自动将我重定向到正确的子域。

However when attempting to redirect to a sub-subdomain ( backend.project01.dev01 ), I simply get a "server unreachable" message. 但是,当尝试重定向到子子域( backend.project01.dev01 )时,我只是收到“服务器无法访问”消息。

See my httpd-vhosts.conf for more info: 有关更多信息,请参见我的httpd-vhosts.conf:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev01
    ServerAlias www.dev01
    DocumentRoot "E:\development\projects"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects">
    </directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName dev01
    ServerAlias *.dev01
    VirtualDocumentRoot "E:\development\projects\%1"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects\%1">
    </directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName dev01
    ServerAlias *.*.dev01
    VirtualDocumentRoot "E:\development\projects\%2"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects\%2">
    </directory>
</VirtualHost>

In a nutshell: 简而言之:

This work: project01.dev01/ 这项工作: project01.dev01/

This doesn't work: backend.project01.dev01/ 这不起作用: backend.project01.dev01/

So I've found a solution. 所以我找到了解决方案。 To match sub-subdomains, you have to match the deepest level first. 要匹配子子网域,您必须首先匹配deepest级别。

Ie: match deepest.sub.domain before sub.domain 即:在sub.domain之前匹配deepest.sub.domain

The answer in this example is: 在此示例中的答案是:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev01
    DocumentRoot "E:\development\projects"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects">
    </directory>
</VirtualHost>

## moved this up
<VirtualHost *:80>
    ServerName dev01
    ServerAlias *.*.dev01
    VirtualDocumentRoot "E:\development\projects\%2"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects\%2">
    </directory>
</VirtualHost>

## moved this down
<VirtualHost *:80> 
    ServerName dev01
    ServerAlias *.dev01
    VirtualDocumentRoot "E:\development\projects\%1"
    ErrorLog "logs\errors.log"
    <directory "E:\development\projects\%1">
    </directory>
</VirtualHost>

In this example apache will always first attempt to match the *.*.dev01 and if it fails, attempt to match *.dev01 . 在此示例中,apache将始终首先尝试匹配*.*.dev01 ,如果失败,则尝试匹配*.dev01

Hopefully this will help others in the future. 希望这会在将来对其他人有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM