Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 2.4通配符子域虚拟主机_Apache_.htaccess_Dns_Virtualhost_Wildcard Subdomain - Fatal编程技术网

Apache 2.4通配符子域虚拟主机

Apache 2.4通配符子域虚拟主机,apache,.htaccess,dns,virtualhost,wildcard-subdomain,Apache,.htaccess,Dns,Virtualhost,Wildcard Subdomain,我的目标是让以下情况发生,当用户访问左侧下方的站点时,会将其带到右侧的目录: www.example.com or example.com => /var/www/example/public_html/ *.example.com => /var/www/example/public_html/sites/%1/public_html/ 我尝试了以下方法: NameVirtualHost *:80 <VirtualHost *:8

我的目标是让以下情况发生,当用户访问左侧下方的站点时,会将其带到右侧的目录:

www.example.com or example.com  =>  /var/www/example/public_html/

*.example.com                   => /var/www/example/public_html/sites/%1/public_html/
我尝试了以下方法:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example/public_html
</VirtualHost>

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/example/public_html/sites/%1/public_html
</VirtualHost>

我使用的是Apache2.4.7,是的,我已经在DNS服务器上设置了通配符。如果有人认为我为了让它正常工作,已经把头撞在墙上两周了,我将不胜感激。

我认为您正在寻找的配置与此非常相似:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/example/public_html
</VirtualHost>

<VirtualHost *:80>
  ServerName *.example.com
  ServerAlias *.example.com
  DocumentRoot /var/www/wildcardexample/public_html
</VirtualHost>
NameVirtualHost*:80
ServerName example.com
ServerAlias www.example.com
DocumentRoot/var/www/example/public\u html
ServerName*.example.com
ServerAlias*.example.com
DocumentRoot/var/www/wildcardexample/public\u html
你觉得怎么样?
在这种情况下,任何子域都将重定向到同一站点。这是您想要的配置吗?或者每个子域需要不同的配置?

好的,整个问题是由于通配符目录位于已绑定的另一个目录下。在我在其他地方创建了一个目录之后,它开始像预期的那样工作了,去想想吧


希望这能帮助其他碰巧遇到这个奇怪错误的人…^ u^

好的,那么每个子域都有一个不同的文件夹?例如,如果用户打开URL test.example.com,它应该转到test.example.com/sites/test/public\u html?我想你误解了配置,你应该处理另一个虚拟主机,它将处理你想要处理的每个子域,对吗?@Facu Farias是的,你是对的,我为每个子域都有一个不同的文件夹,我看到无数人将此设置为网站托管,所以我知道这是可能的。为每个子域创建一个新的conf的问题是,我必须为每个子域输入一个新的DNS条目和conf文件。这也需要时间来传播。如果我遗漏了某些内容,请更正。@Facuvarias,我不希望它实际转到/sites/{subdomain}/public,我希望{subdomain}.example.com将其作为文档根目录。您给出的解决方案有几个问题。第一,不能在服务器名称中使用通配符(*),第二,我希望每个子域映射到它自己的命名文件夹。正如我到目前为止所做的那样,这应该可以通过使用来实现。如果你需要更多的细节,请告诉我,谢谢^_^是的,对不起,我没有测试它,它只是一个例子。如果用户在URL上放置了您无法处理的内容,会发生什么情况?我是说。。你不可能把所有的可能性都映射到不同的网站上,不是吗?请详细说明solutions@Mahaimin如前所述,要将动态sud域绑定到的目录不能位于已绑定到域的目录下。因此,解决方案是将存储子域的位置移动到webroot,然后按预期工作。
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/example/public_html
</VirtualHost>

<VirtualHost *:80>
  ServerName *.example.com
  ServerAlias *.example.com
  DocumentRoot /var/www/wildcardexample/public_html
</VirtualHost>