不同用户的假子域,同时仍浏览相同的文件夹结构

Fake subdomain for different users while still browsing same folder structure

我想为不同的用户创建假的子域以获得更多的虚荣心,并让用户(在本例中为公司)感觉他们处于一个更加孤立的环境中。

为了可维护性,所有用户仍然浏览相同的文件对我来说很重要,以避免在更新代码时必须为存在的每个用户更新文件。

我的网站在根目录下有一个 public 部分,比方说 www.example.com。我希望能够伪造以下类型的子域:

user1.example.com

真正的 URL 应该是 www.example.com/member/?user=user1。我希望文件夹结构遵循相同的模式。 www.example.com/member/settings/?user=user1 会显示为 user1.example.com/settings/ 等等。

我想这最好用 .htaccess 来实现,不是吗? 正确的 .htaccess 代码是什么?

谢谢!

根据您在此处提供的信息,有一些 .htaccess 未经测试但可能会起作用。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteCond %{QUERY_STRING} ^user=(.*)$
RewriteRule ^(.*)$ http://%1.example.com/? [R=302,L]

一旦你发现它工作正常,将 302 替换为 301

注意:请务必注意,您需要添加子域通配符

最后解决的超级简单!它并没有像我最初预期的那样使用 .htaccess 解决。我用通配符子域解决了这个问题。

注册新的子域时,在域前缀中输入*,例如*.example.com。通配符子域的文件夹将在您的服务器上创建,例如 _wildcard_.example.com。每当你访问 site1.example.com, fakesub.example.com 等时,访问者的浏览器将读取文件通配符.example.com 文件夹。

这一切的美妙之处在于,如果我创建了一个我想使用的子域,例如 forum.example.com,这个真正的子域将具有优先权通过通配符子域,文件将从该子域的文件夹中获取,而不是从通配符子域文件夹中获取。

我使用 PHP 并且需要知道子域以便为当前用户获取适当的数据库。为此,我使用以下代码:

$subdomain = explode('.', $_SERVER['HTTP_HOST'])[0]

使用通配符 SSL 证书,我可以保护所有这些子域。