我已经发布了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来说, 不好的主意,因为没有链接汁将被转移到链接 页面。
答案 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