2016-10-26 7 views
0

У меня есть этот маршрут:Как соответствовать CNAME на Symfony

api: 
    resource: "@WebApiBundle/Resources/config/routing.yml" 
    prefix: /
    host: api.mydomain.com 

Я хочу, чтобы позволить пользователям добавлять CNAME свои домены к api.mydomain.com и когда они используют свой собственный домен, например api.anotherdomain.com или anotherdomainwithoutsubdomain.com я хочу показать маршрут api.

Я попытался это:

api: 
    resource: "@WebApiBundle/Resources/config/routing.yml" 
    prefix: /
    host: "{domain}" # and also "{subdomain}.{domain}" 

, но это не сработало. Он просто переходит к основной маршрутизации вместо WebApiBundle.

Как я могу это сделать на Symfony? Кстати, я использую Symfony3.

+1

Указывая хост в конфигурации маршрута, вы добавляете требование. Если вы не хотите (или не можете) добавить это требование, просто удалите его. – Gerry

ответ

0

Это можно сделать так:

Вы должны specifiy хосты в порядке routing.yml.

Так вот, как это работает. Все указанные хосты идут для своих маршрутов, а другие будут следовать последнему правилу. Смотрите пример:

fos_user: 
    resource: "@FOSUserBundle/Resources/config/routing/all.xml" 

web_main: 
    resource: "@MyWebMainBundle/Resources/config/routing.yml" 
    prefix: /
    host: www.my.com 

web_api: 
    resource: "@MyWebApiBundle/Resources/config/routing.yml" 
    prefix: /
    host: api.my.com 

web_public_api: 
    resource: "@MyWebPublicApiBundle/Resources/config/routing.yml" 
    prefix: /

В этом случае web_public_api будет обрабатывать все другие домены, которые указывали на мой сервер. В случае домена пользователя/клиента.

Позже, в контроллере или промежуточном программном обеспечении, проверьте домен, если он присутствует в вашей базе данных. Если нет, верните 404 или 403 или даже 500.

+0

Это правильное решение. Один момент: вы хотите поместить 'www.my.com' и' api.my.com' в параметры, например: 'host:"% site_host% "' для возможности разработки на локальной машине. –

+0

@StephanYamilov точно сделал это прямо сейчас, как вы и предполагали. Теперь его лучше. Теперь у меня есть промежуточное программное обеспечение, которое проверяет '$ request-> getHost()' против моей базы данных и если не удается вернуть код ошибки HTTP-ошибки. Поэтому никто не может использовать, не добавляя свой домен в панель управления на моем веб-сайте. – xangr

 Смежные вопросы

  • Нет связанных вопросов^_^