【问题标题】:Too many redirects with symfony 4symfony 4 的重定向太多
【发布时间】:2019-06-02 21:05:57
【问题描述】:

我已经发布了一个 symfony 4 网站,我可以在域上毫无问题地访问它。然而,大多数人都会得到错误:

重定向过多

读到这个,我相信不知何故存在重定向循环。问题是,我自己无法重现该问题,因此无法测试不同的解决方案。我不明白为什么我没有这个问题,而其他人有。我正在使用带有以下 .htaccess 文件的 Apache:

<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 这也是一个 坏主意,因为没有链接汁将转移到链接 页面。

【问题讨论】:

    标签: apache symfony4


    【解决方案1】:

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

    我通过更改 services.yaml 中的以下代码解决了这个问题:

    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
    

    parameters:
        locale: 'en'
        app_locales: en
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 2021-03-25
      • 1970-01-01
      • 2015-06-13
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多