【问题标题】:Apache - subdomains, mod_rewrite and virtualdocumentrootApache - 子域、mod_rewrite 和 virtualdocumentroot
【发布时间】:2011-05-03 09:32:40
【问题描述】:

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

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

2) 确保用户在浏览器中看到的 URL 是他输入的内容。

3) 无重定向

(因此,如果用户键入 avalidsubdomain.mywebsite.com,则应从相应目录提供页面。此时我不关心我需要保留的目录结构。只要它有效,一切都很好。开另一方面,如果他键入了一些不存在的东西.mywebsite.com,他不应该得到 404,而是应该被带到网站上的自定义页面)。

例如,看到 blogspot.com 上的任何子域都可以使用 - 例如 http://dsadsadsdsadsd.blogspot.com/。 (当然谷歌是谷歌,他们可以编写自己的网络服务器)。但我确信像这样简单的事情可以在 Apache 中完成。

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

2) 根据我在各个线程上阅读的内容,我可以使用 mod_rewrite 作为一个包罗万象的子域规则,但是,用户在 broser 中看到的 URL 不会保持不变。

谢谢!

干杯,

日本


我问了一个相关的问题,那里的答案似乎解决了这个问题。 在这里提一下,以防有人看到这个问题:

mod_rewrite regex (too many redirects)

【问题讨论】:

    标签: apache mod-rewrite subdomain virtual-directory wildcard-subdomain


    【解决方案1】:

    你要设置的场景可以用mod_vhost_alias for Apache httpd来实现。

    您只需要创建一个默认虚拟主机来捕获不存在的子域,请参阅An In-Depth Discussion of Virtual Host Matching 了解详细信息。

    例子:

    <VirtualHost _default_:80>
      ServerName example.com
      DocumentRoot /srv/www/custom_page
      # ...
    </VirtualHost>
    
    UseCanonicalName Off
    VirtualDocumentRoot /srv/www/%1/%2+
    

    【讨论】:

    • 我试过这个,就像你在上面写的一样。但是对于输入错误的子域(或任何不存在的 url),它仍然不会转到 custom_page。所有模块均已启用,apache 已重新启动。
    【解决方案2】:

    您所描述的内容可以通过 DNS 完成,您必须使用 wildcards 才能完成。

    【讨论】:

    • 带通配符的 DNS 已经设置好并且工作正常。对 *.mydomain.com 的请求正在发送到我的服务器。只是我想要 i) 能够在不重新配置 apache 或任何东西的情况下动态添加子域,同时将输入错误的域重定向到我的主页(或类似的东西)。
    【解决方案3】:

    为了它的价值:

    我提出an approach that uses mod_rewriteVirtualDocumentRoot /.../%0 将不存在的子域重定向到相应的根域。这确实会更新客户端 URL,但您可以使用 [P] RewriteRule 标志来隐藏它。如您的示例所示,重定向到占位符页面也很简单。

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

    【讨论】:

      【解决方案4】:

      在你的 httpd.conf 添加

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

      Wich 会将您的域 www.example.com 指向 /htdocs/example.com/www/

      然后在你的 root 文件夹中添加一个 .htaccess 文件: /htdocs/example.com/.htaccess 包括: 现在,每个不存在的域都将被重定向到 www,状态码为 301(永久移动)。您可以将 WWW 更改为您想要的任何内容。

      # 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]
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2012-07-04
        • 2014-02-24
        • 2011-04-23
        • 2013-04-24
        • 2011-05-30
        • 2011-02-04
        • 1970-01-01
        • 2012-05-09
        • 2013-02-04
        相关资源
        最近更新 更多