Php symfony 3强制https时重定向过多

Php symfony 3强制https时重定向过多,php,symfony,Php,Symfony,我有一个类似于SO上发布的其他问题的问题,但这些解决方案都不起作用 我使用的是内置于OSX El Capitan服务器中的Apache,当我不通过以下指令将http流量强制到https上时,https可以正常工作: access_control: - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, host: mypc\.local$ } 但添加此项会导致在访问我的网站的本地ur

我有一个类似于SO上发布的其他问题的问题,但这些解决方案都不起作用

我使用的是内置于OSX El Capitan服务器中的Apache,当我不通过以下指令将http流量强制到https上时,https可以正常工作:

    access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, host: mypc\.local$ }
但添加此项会导致在访问我的网站的本地uri时出现过多重定向错误:
https://mypc.local/myproject/web/

完整的
security.yml

security:
  access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, host: mypc\.local$ }

  providers:
    our_db_provider:
        entity:
            class: AppBundle:Users
            property: username

  encoders:
    AppBundle\Entity\Users: plaintext   

firewalls:
    # disable authentication for assets and the profiler 
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern:    ^/
        http_basic: ~
        provider: our_db_provider

        anonymous: ~
        form_login:
            login_path: /
            check_path: login

        logout:
            path:   /logout
            target: /
            invalidate_session: true 
编辑: 以下是响应标题:

> GET /myproject/web/ HTTP/1.1
> Host: mypc.local
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Tue, 09 Aug 2016 12:15:00 GMT
< Server: Apache
< X-Powered-By: PHP/5.5.31
< Cache-Control: no-cache
< Location: https://mypc.local/myproject/web/
< MS-Author-Via: DAV
< Content-Length: 396
< Content-Type: text/html; charset=UTF-8
< 
* Ignoring the response-body
* Connection #0 to host mypc.local left intact
* Issue another request to this URL: 'https://mypc.local/myproject/web/'
* Found bundle for host mypc.local: 0x7f89b2d01780
* Re-using existing connection! (#0) with host mypc.local
* Connected to mypc.local (fe80::ea06:88ff:fecf:61c6) port 443 (#0)
> GET /myproject/web/ HTTP/1.1
.... repeated 20 times
>GET/myproject/web/HTTP/1.1
>主持人:mypc.local
>用户代理:curl/7.43.0
>接受:*/*
> 
GET/myproject/web/HTTP/1.1
.... 重复20次

我在使用Symfony behing AWS ELB和Beanstalk时也遇到了同样的问题。URL生成器生成的所有URL,其中包含http方案。强制使用https会让我的Symfony感到困惑,并运行无限重定向循环

这与trusted_proxies变量有关。我认为symfony在做一个无限循环,因为对他来说,即使你使用https,你的方案也是http

您是否支持varnish代理,负载平衡器

对于我来说,使用totas解决了这个问题:

Request::setTrustedProxies(数组($Request->server->get('REMOTE_ADDR'))

我被迫这样做,因为AWS ELB有动态IP。如果您的代理或负载平衡器具有固定IP,您可以使用truted_proxies var,如前所述

如果有人在AWS ELB环境中有更好的解决方案,我很感兴趣


我希望这将对您有所帮助。

简单地说,Symfony配置不应该是重定向流量的地方,原因有两个:

  • 可维护性
  • 头顶
  • 如果您启用了mod rewrite,并且我认为您应该启用mod rewrite,那么您可以在Apache中配置这些设置:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]
    

    当你说太多重定向错误时,它到底是如何运行的?当我请求页面时,在Chrome网络选项卡中,我看到大约20个带有代码
    301的请求被永久移动
    ,直到消息
    终止mypc.local页面不工作。mypc.local重定向了您太多次。
    可能会无限重定向回http。。显示您的服务器发送的标题<代码>卷曲--冗长--位置--不安全http://your.site
    Francis,看一看Symfony关于强制使用HTTPS的文档:如果您尝试在匿名会话(浏览器中的私密会话)中访问该页面,会发生什么情况?也许你的浏览器记录了一个301,现在应该被清除。