symfony 4重定向过多

时间:2019-06-02 21:05:57

标签: apache symfony4

我已经发布了symfony 4网站,我可以毫无问题地访问该域。但是,大多数人都会收到错误消息:

  

重定向过多

关于此内容,我认为某种程度上存在重定向循环。问题是,我无法自己重新创建问题,因此无法测试其他解决方案。我不明白为什么我没有这个问题,而其他人却没有。我将Apache与以下.htaccess文件配合使用:

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]

    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

您能看看是否有问题吗?而且,为什么我没有相同的问题?

编辑:另一个奇怪的事情是:看到错误的人可以通过访问www.domain.com/page(这是实际页面)来访问域。这只是他们无法直接访问的主页。当他们从其他页面“输入”时,他们可以访问主页。

Edit2 :在www.redirect-checker.org上运行测试,结果如下:

  

结果

     

https://www.studiosaam.nl找到302 /?_ locale = de找到302   /?_ locale = de 302找到/?_ locale = de 302找到/?_ locale = de 302找到   /?_ locale = de 302找到/?_ locale = de 302找到/?_ locale = de 302找到   /?_ locale = de找到500个内部服务器错误问题:

     

重定向过多。请尝试减少https://www.studiosaam.nl的重定向次数。实际上,您使用8个重定向。理想地   您在重定向链中不得使用超过3个重定向。更多   超过3个重定向将对您的服务器产生不必要的负载,   降低速度,最终导致不良的用户体验。       您使用302重定向。这意味着,实际内容是暂时无法访问的,将很快回来。使用302   重定向通常移动的页面是一个坏主意。搜索引擎机器人   可能不会遵循或暂时将其处理。对于SEO来说,   不好的主意,因为没有链接汁将被转移到链接   页面。

1 个答案:

答案 0 :(得分:0)

事实证明,此问题与Symfony配置有关,而不与Apache有关。发生问题是因为在 services.yaml 中定义了多个locales,但实际上并不可用。由于机器的语言环境为en(英语),因此没有出现任何错误,因此无法重现该问题。具有不同locale的其他用户(例如,例如de)进入循环,其中Symfony尝试将用户转发到/?_locale=de,该用户不存在,因此被发送回{{1} },然后再到/等...

我解决了问题,更改了 services.yaml 中的以下代码:

/?_locale=de

parameters:
    locale: 'en'
    app_locales: en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr