Symfony 5 - несколько клиентских доменов - PullRequest
0 голосов
/ 28 мая 2020

Не слишком уверен в том, как go найти лучший способ об этом. Но то, что я пытаюсь создать, очень похоже на генерального c провайдера общего хостинга, но в 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 с VirtualHosts позже)

<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>

Я исследовал несколько подобных, но ничего, что могло бы этого достичь, разве есть способ лучше? Мне нужно, чтобы домены были динамическими c. Пользователь будет go на свой URL-адрес, а их do c root должен быть моим Symfony маршрутом (https://myawesomesite.com/sites/theusersdomain.com/).

1 Ответ

0 голосов
/ 29 мая 2020

Только для будущих гуглеров.

Я решил переосмыслить и придумал более простое решение, которое должно работать.

В основном сохраняйте VirtualHosts как есть, а файл .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.');

    }

}

Он в основном обнаружит любой другой входящий домен, кроме чем моя и соответствует. Возможно, будут внесены улучшения, но на данный момент это работает для моих требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...