【问题标题】:PHP : dynamic sub domains for each user using htaccessPHP:使用 htaccess 的每个用户的动态子域
【发布时间】:2010-09-01 05:44:42
【问题描述】:

是否可以使用 htaccess 为每个用户创建动态子域。例如,如果有一个用户名为 myusername 的用户,则为他添加一个子域,如 htttp://www.myusername.example.com,当有人加载此页面时,它应该为 http://www.example.com/?user=myusername(使用 htaccess)

【问题讨论】:

标签: php .htaccess


【解决方案1】:

您必须先调整您的服务器软件。
?user=myusername 是主机 www.example.com
上的路径 而 www.myusername.example.com 是另一个主机
浏览器必须知道应该为 www.myusername.example.com 域调用哪个 IP 地址。

因此,首先您必须设置 DNS 记录,以使所有子域成为主域的别名。
接下来,您必须设置您的网络服务器软件以接受所有子域。
最后,您可以处理任何子域请求。不涉及 .htaccess。

有关详细信息 - 请参阅之前在 SO 上回答的许多相同问题。

【讨论】:

    【解决方案2】:

    是的,有可能!

    你可以这样使用:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC]
    RewriteRule . http://example\.com/?user=%2/ [L]
    </IfModule>
    

    确保 *.example.com 设置为指向 example.com 的服务器。 (您需要为其创建一个名称记录。您必须使用“通配符子域”,如“balupton”所指)

    【讨论】:

    • 这个 .htaccess 完全没用。没有它,一切都会正常进行。并且语法错误。
    • 我不知道你为什么这么说。我从我的一个现场网站复制,它工作得非常好。你能指出语法有什么问题吗?
    • 这是设计错误的。把这个 .htaccess 放在一边,将此行添加到您的索引脚本 $_GET['user']=strtok($_SERVER['HTTP_HOST'],"."); 中,它将起作用。工作得更好,因为子域将保留在地址栏中
    • 同意!它会做同样的事情。但是,您可以使用 htaccess 做更多的事情。例如调用其他一些 url,如:example.com/user/%2。 (您甚至可以通过将 header('example.com/user/'.$_GET['user']) 放在 index.php 中来做到这一点,但我认为 htaccess 解决方案更优雅。)
    • 无用的重定向。没有人愿意将基于子域的 url 变成基于路径的丑陋的 URL
    【解决方案3】:

    我不相信您可以在 .htaccess 文件中执行此操作。您所描述的是配置多个Virtual Hosts 以由给定的Apache 实例提供服务。虚拟主机必须在 Apache 服务器配置文件中配置,而不是在 .htaccess 文件中。请参阅文档。

    【讨论】:

      【解决方案4】:

      您可以使用 .htaccess 文件部分完成此操作,但某些配置必须在 httpd.conf 级别完成。基本上,它看起来像这样:

      a) 将您的域配置为该区域的通配符 dns。如何执行此操作的具体细节取决于您的 DNS 提供商是谁,或者您正在运行哪个 BIND 软件。但基本上进行设置,以便 *.example.com 指向您的服务器地址。
      b) 像这样配置网络服务器:

      <VirtualHost x.x.x.x:80>
          ServerName *.example.com
          ...
      </VirtualHost>
      
      <VirtualHost x.x.x.x:80>
          Server some.fixed.subdomain.example.com
          ...
      </VirtualHost>
      

      确保在通配符条目之后列出所有非动态域,否则很可能无法正常工作。 Apache 对它的设置顺序相当挑剔。

      使用此设置,无需将请求重写为查询。您可以让您的脚本检查 $_SERVER['HTTP_HOST'] 以确定正在为哪个虚拟子域提供服务并从那里开始工作。

      【讨论】:

        【解决方案5】:

        您所追求的功能称为Wildcard Subdomains。它允许您不必为每个子域设置 DNS,而是使用 apache 重写进行重定向。你可以找到一个很好的教程here,但是那里有成千上万的教程。以下是该教程中的必要代码:

        <VirtualHost 111.22.33.55>
            DocumentRoot /www/subdomain
            ServerName www.domain.tld
            ServerAlias *.domain.tld
        </VirtualHost>
        

        但是,由于它需要使用 VirtualHosts,因此必须在服务器的 httpd.conf 文件中进行设置,而不是在本地 .htaccess 中设置。

        【讨论】:

          猜你喜欢
          • 2013-03-25
          • 1970-01-01
          • 1970-01-01
          • 2014-01-03
          • 2020-05-12
          • 2013-11-19
          • 1970-01-01
          • 2011-10-14
          • 2014-05-22
          相关资源
          最近更新 更多