代码之家  ›  专栏  ›  技术社区  ›  The.Anti.9

对子域使用mod重写

  •  2
  • The.Anti.9  · 技术社区  · 15 年前

    我不希望人们能够在我的站点中注册他们自己的分区,并且让这些分区成为我的站点的自己的子域。所以有人可以注册“test”并让“test.example.com”引用他们的站点,即say/site.php?id=1那么我该怎么写一个mod重写规则呢?

    3 回复  |  直到 12 年前
        1
  •  2
  •   Andrew Moore    15 年前

    mod_rewrite 可能不是最好的工具。rewriterules对于将文件映射到其他文件是很好的,但它并不是真正用于域匹配的。

    尽你所能用 MODY重写 如下所示:

    RewriteEngine On
    # Skip www.domain.com
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
    RewriteRule ^/(.*)$  site.php?domain=%1&file=$1 [L]
    

    这真的没用。如果以编程方式检查 HTTP_HOST 像这样的:

    function get_subdomain() {
      if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches)) 
        return $matches[1];
    }
    
        2
  •  0
  •   Michael Mikowski    15 年前

    您可以将Apache配置为在虚拟主机容器中声明Apache配置(例如www.mydomain.com等)中的“特殊”域,并将其他域默认为第一个虚拟主机。然后,您可以将基本URL重写为分派应用程序,该应用程序检查该URL并将用户发送到其正确的区域。

    来自Apache 2.0文档:

    几乎任何Apache指令都可以执行 到虚拟主机容器中。这个 第一个虚拟主机部分用于 没有已知服务器名称的请求。

    将处理*.mydomain.com的代码放入第一个虚拟主机:

    <VirtualHost *:80>
      Servername custom.mydomain.com
      DocumentRoot /var/www/html/custom
      RewriteEngine on
      RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
      # more configs here
    </VirtualHost>
    
    <VirtualHost *:80>
      Servername www.mydomain.com
      DocumentRoot /var/www/html/homepage
      # more configs here
    </VirtualHost>
    

    在dispatch.cgi中,检查调用URL以确定用户应该去哪里。确保将DNS设置为接受所有子域。

    希望有帮助!

        3
  •  0
  •   helion3    15 年前

    事实上,在过去的一年里,我们一直在毫无问题地使用这种技术。我们的mod重写配置如下:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !www.mydomain.com
    RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
    RewriteCond %{REQUEST_URI} !admin
    RewriteRule (.*) /admin/ [R=301,L]
    RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]
    

    发生的情况是,用户被定向到raccount.mydomain.com/admin。

    然后,我们使用PHP来标识域名的帐户部分。使用类似于$\u server['server\u name']的方法或获取域名并对其进行解析的方法非常有效。

    不过,将这些配置保存在httpd.conf中,如果将其保存为.htaccess,那么在流量较高的站点中,这将成为一个CPU问题。