Apache-子域、mod_重写和virtualdocumentroot

Apache-子域、mod_重写和virtualdocumentroot,apache,mod-rewrite,subdomain,virtual-directory,wildcard-subdomain,Apache,Mod Rewrite,Subdomain,Virtual Directory,Wildcard Subdomain,有谁能建议我如何实现以下目标(我无法使用mod_rewrite或virtualdocumentroot制作解决方案):: 1) 允许我的网站上的任何子域(*.mysite.com不应给出404错误)和 2) 确保用户在浏览器中看到的URL是他键入的URL 3) 没有重定向 (因此,如果用户键入avalidsubdomain.mywebsite.com,则应该从相应的目录中提供页面。此时,我不关心需要保留的目录结构。只要它有效,任何东西都可以。另一方面,如果他键入的内容不是texist.myweb

有谁能建议我如何实现以下目标(我无法使用mod_rewrite或virtualdocumentroot制作解决方案)::

1) 允许我的网站上的任何子域(*.mysite.com不应给出404错误)和

2) 确保用户在浏览器中看到的URL是他键入的URL

3) 没有重定向

(因此,如果用户键入avalidsubdomain.mywebsite.com,则应该从相应的目录中提供页面。此时,我不关心需要保留的目录结构。只要它有效,任何东西都可以。另一方面,如果他键入的内容不是texist.mywebsite.com,他不应该得到404,而是应该被带到网站上的自定义页面)

例如,查看blogspot.com上的任何子域都可以像这样工作(当然,谷歌就是谷歌,他们可以编写自己的web服务器)。但我相信,在Apache中可以完成这样简单的事情

注: 1) 我不想每次添加有效子域时都添加/更改apache配置或.htaccess

2) 根据我在不同线程上读到的内容,我可以使用mod_rewrite作为catchall子域规则,但是用户在broser中看到的URL并不保持不变

谢谢

干杯

太平绅士


我问了一个相关的问题,那里的答案似乎解决了问题。 如果有人看到这个问题,请在此提及:


您想要设置的场景可以用for Apache httpd实现

您只需要创建一个默认虚拟主机来捕获不存在的子域,有关详细信息,请参阅

例如:

<VirtualHost _default_:80>
  ServerName example.com
  DocumentRoot /srv/www/custom_page
  # ...
</VirtualHost>

UseCanonicalName Off
VirtualDocumentRoot /srv/www/%1/%2+

ServerName example.com
DocumentRoot/srv/www/custom_页面
# ...
UseCononicalName关闭
VirtualDocumentRoot/srv/www/%1/%2+

您所描述的内容可以通过DNS完成,您必须使用它来实现。

对于它的价值:

我使用了
VirtualDocumentRoot/../%0
将不存在的子域重定向到相应的根域。这会更新客户端URL,但您可以使用[P]RewriteRule标志来隐藏此内容。在您的示例中,重定向到占位符页面也很简单

设置完成后,无需编辑任何配置设置即可添加或删除域或子域。

在httpd.conf add中

<VirtualHost *:80>
        ServerName default
        ServerAlias *
        VirtualDocumentRoot /htdocs/%-2.0.%-1/%-3
</VirtualHost>

我希望这会对您有所帮助。

我尝试了这个,正如您在上面所写的那样。但它仍然不会转到错误键入的子域(或任何不存在的url)的自定义页面。所有模块均已启用,apache已重新启动。已设置带通配符的DNS,并且工作正常。向*.mydomain.com发送的请求正在发送到我的服务器。只是我想我)有能力在不重新配置apache或任何东西的情况下动态添加子域,同时将输入错误的域重定向到我的主页(或类似的东西)。
# Enable Rewrite Engine
RewriteEngine on

# Rewrite all non-existing sites to www.
RewriteCond %{HTTP_HOST} example\.com$
RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]