在我的项目中,我必须创建一个子域,即
如果用户名在注册时为XXX,则会创建子域名,如XXX.example.com
怎么做?
我将使用php进行脚本编写。
答案 0 :(得分:1)
这可能比你想象的复杂一点。
我建议对mod重写和htaccess做一些阅读。
你可以从这里开始:
编辑:或者只是选择我的SO用户提供的一个很好的例子。 ;)
答案 1 :(得分:1)
我找到了一个似乎就是这样做的脚本,根据需要在服务器上创建一个子域。 它可能需要稍微调整才能在你的特定控制面板上工作,但据我所知,评论非常积极。
您是否考虑过使用htaccess和url重写? 找到可能对您有帮助的代码:
# Rewrite <subdomain>.example.com/<path> to example.com/<subdomain>/<path>
#
# Skip rewrite if no hostname or if subdomain is www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
# Extract (required) subdomain (%1), and first path element (%3), discard port number if present (%2)
RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.example\.com(:80)?<>/([^/]*) [NC]
# Rewrite only when subdomain not equal to first path element (prevents mod_rewrite recursion)
RewriteCond %1<>%3 !^(.*)<>\1$ [NC]
# Rewrite to /subdomain/path
RewriteRule ^(.*) /%1/$1 [L]
答案 2 :(得分:1)
只要这是非SSL站点,那么到目前为止最简单的方法是不要打扰 - 只需使用通配符DNS域和vhost,然后在PHP代码中映射任何特定于域的行为。如果您需要SSL站点,那么它会更加复杂 - 您需要为每个证书分配一个单独的IP地址/端口 - 而woldcard证书可能非常昂贵。
如果您想要设置某种托管软件包,那么它会涉及到更多 - 您如何处理这取决于您正在使用的Web服务器和DNS服务器。
假设(再次没有SSL)在Unix / POSIX / Linux上使用Apache并绑定,那么,我再次使用通配符DNS条目,然后: 1)为网站创建一个基础目录,可选择使用一组默认文件填充它 2)在名为XXX.conf的/etc/httpd/conf.d中的自己的文件中添加一个vhost定义 3)向HTTPD进程发送kill -HUP(使其无需完全重启即可读取新的配置文件)。
有一点需要注意的是,你真的不应该允许httpd进程直接写入自己的配置文件 - 你肯定不想给它root权限。更安全的解决方案是创建一个CLI脚本,使用用户名作为参数执行此操作,然后将其设置为setuid,并从HTTPD进程运行的脚本中调用它。
下进行。
答案 3 :(得分:0)
最好的方法是在DNS服务器中使用小丑:
www.example.com. IN A 1.2.3.4
*.example.com. IN A 1.2.3.4
通过这种方式,不必创建子域:默认情况下,所有子域都指向相同的IP。
在您的PHP代码中,您只需获得$ _SERVER [“HOST”]并获得第一部分:
$hostParts=explode('.',$_SERVER["HTTP_HOST"]);
$user=$hostParts[0]
答案 4 :(得分:0)
首先,您需要确保在DNS中设置了通配符域,并确保您的网络服务器(apache?)将该通配符域的所有查询都指向您的php文件。
然后在php中你可以查看$ _SERVER [“HTTP_HOST”]以查看哪个子域用于该特定请求。
答案 5 :(得分:0)
因为您将在用户注册时创建子域。 试试这个.htaccess文件:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^.htaccess$ - [f]
RewriteCond %{HTTP_HOST}!^www.domain.com
RewriteCond %{HTTP_HOST} ^([^.]+).domain.com
RewriteRule ^$(.*) /$1/%1 [L]
创建一个控制器的功能,它将获取子域的值并显示必要的内容。 像::
public function show ($domain)
{
**.**..*..**.** Your code goes here
}
当用户尝试 xxx.domain.com/controller/show 时,这将是 domain.com/controller/show/xxx 。如果您想 xxx.domain.com domain.com/controller/show/xxx ,只需根据需要编辑htaccess文件。