Symfony 5 - 多个客户端域



不太确定解决这个问题的最佳方法。但是我正在尝试创建的与通用共享托管服务提供商非常相似,但在Symfony中。

假设我有一个网站,myawesomesite.com。用户可以注册并拥有自己的空间 myawesomesite.com/sites/theusersdomain.com/。

我可以创建这样的路线,没问题...

/**
* @Route("/sites/{client_website_address}", name="client_public")
*/
public function _client_index($client_website_address) {
return new Response($client_website_address);
}

最终,我希望用户拥有自己的域名指向此路由。这可以通过Apache VirtualHost完成吗?(我将需要这个用于SSL/TLS证书(我已经这样做了,但不知道如何指向路线。

UseCanonicalName Off
LogFormat "%V %h %l %u %t "%r" %s %b" vcommon
#Client websites
<VirtualHost *:80>
VirtualDocumentRoot "/var/www/html/myawesomesite.com/public"
<Directory "/var/www/html/myawesomesite.com/public">
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

我还需要添加到我当前的 .htaccess 文件中吗?我目前的.htaccess是Symfony的标准。(我稍后可能会将.htaccess文件与虚拟主机合并(

<IfModule mod_rewrite.c>
RewriteEngine On
# Determine the RewriteBase automatically and set it as environment variable.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::2$
RewriteRule ^(.*) - [E=BASE:%1]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
# Rewrite all other queries to the front controller.
RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>

我已经研究过一些类似的方法,但没有一个能做到这一点,除非有更好的方法?我需要域是动态的。用户将转到他们的URL,他们的文档根应该是我的Symfony路由(https://myawesomesite.com/sites/theusersdomain.com/(。

只为未来的谷歌员工。

我决定重新思考,并提出了一个更简单的解决方案。

基本上保持虚拟主机原样,并保持.htaccess文件不变。

我通过检测"主机"并将需求与正则表达式匹配,为客户主页创建了一个单独的Symfony控制器。

class ClientController extends AbstractController {
/**
* @Route("/", host="{domain_name}", requirements={"domain_name"="^(?!(www.)?myawesomewebsite.com$).*$"}, name="client_public")
*/
public function _client_index() {
return new Response('This is the client web page controller.');
}
}

它基本上会检测除我自己的域之外的任何其他传入域并匹配。可能需要改进,但现在这似乎可以满足我的要求。

最新更新