2016-10-26 16 views
0

我有這樣的路線:如何匹配CNAME對Symfony的

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

我希望讓用戶添加CNAME其域中api.mydomain.com,當他們用自己的域名,例如api.anotherdomain.comanotherdomainwithoutsubdomain.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將處理誰指着我的服務器的所有其他領域。在用戶/客戶域名的情況下。

稍後,在控制器或中間件中,檢查域是否存在於數據庫中。如果不存在,請返回404403或甚至500

+0

這是正確的決定。有一點:你想把'www.my.com'和'api.my.com'放在參數中,像這樣:'host:「%site_host%」''可以在本地機器上開發。 –

+0

@StephanYamilov現在正如你所建議的那樣正確地做到了這一點。現在它更好。現在我有一箇中間件檢查'$ request-> getHost()'對我的數據庫,如果失敗返回http錯誤狀態碼。所以沒有人可以使用,也可以將他們的域添加到我的網站的控制面板。 – xangr