首页 > 解决方案 > Symfony3 强制 https 全部生成错误无限循环

问题描述

我在 Symfony3 中建立了网站。我想强制所有路线https。

我将此添加到我的 .htaccess 文件中:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

主页工作正常,用户使用 https 重定向到版本,但在链接为字符“/”的任何子页面上,我遇到问题“错误:无限循环”

例如,这项工作正常:

https://www.example.com

https://www.example.com/subpage1

但这会产生错误无限循环: https ://www.example.com/subpage1/subpage2

当我删除 .htaccess 中的强制 https 时,一切正常...

标签: .htaccesssymfonyhttps

解决方案


避免用来.htaccess做这样的事情。
除非您打算只在 https 中使用站点的某些部分,否则请改用 vhost 配置文件。

这是 Symfony 3 与 Apache 2 的完整示例

<VirtualHost *:80>
    ServerName www.example.com

    Redirect / https://www.example.com
</VirtualHost>

<VirtualHost _default_:443>
    ServerName www.example.com

    DocumentRoot /var/www/www.example.com/web
    <Directory /var/www/www.example.com/web>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    <Directory /var/www/www.example.com/web/bundles>
        <IfModule mod_rewrite.c>
            RewriteEngine Off
        </IfModule>
    </Directory>

    SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    ErrorLog /var/www/www.example.com/var/logs/error.log
    CustomLog /var/www/www.example.com/var/logs/access.log combined
</VirtualHost>

来源:https ://wiki.apache.org/httpd/RedirectSSL


推荐阅读