簡體   English   中英

如何強制https為prod但http為dev環境?

[英]How to force https for prod but http for dev environment?

我有一個symfony2應用程序。

在prod服務器上,我希望我的所有路由都通過https,而在開發中我希望能夠使用http。 我如何單獨使用symfony2實現這一目標? 我不想觸摸網絡服務器配置。

我嘗試在我的routing.yml添加它

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [https]

在我的routing_dev.yml有這個:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [http]

_main:
    resource: routing.yml

它仍然想在開發模式下轉到https。

您可以為此定義參數。 app/config/config.yml定義:

parameters:
    httpProtocol: http

然后在app/config/config_prod.yml

parameters:
    httpProtocol: https

並在routing.yml更改為:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  ['%httpProtocol%']

清除緩存(prod和dev),它應該工作。

更改你的app.php最后幾行,如下所示:

if ($request->getScheme() === 'http') {
    $urlRedirect = str_replace($request->getScheme(), 'https', $request->getUri());
    $response = new RedirectResponse($urlRedirect);
} else {
    $response = $kernel->handle($request);
}

$response->send();

$kernel->terminate($request, $response);

我的第一個解決方案工作正常,但是應該注意不要在routing_dev.yml覆蓋自己的路由。 在文件的最后,我有

_main:
    resource: routing.yml

所以我所有的捆綁路由都改回了https-scheme。 訂購條目,以便我的自定義條目最后解決問題。

我認為您可以在app_dev.php文件中檢查該方案,並根據該方案將其重定向到https

$url = parse_url($_SERVER['HTTP_REFERER']);
if ($url['scheme'] == 'http') {
   header("Location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['PHP_SELF']}");
}

或者也許能夠在URL中為app_dev.php應用.htaccess一些更改

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM