首页 > 解决方案 > 避免在 contao 中进行多次重定向

问题描述

我使用 Google 的门户网站 web.dev 分析了我的网站。这告诉我,如果我在没有 www 和 http 的情况下调用 URL,我有太多的重定向:它首先转到 https 而没有 www,然后转到带有 www 的 http,然后才转到 https 和 www。这是我的 htacces 文件:

<IfModule mod_headers.c>
    # Allow access from all domains for webfonts (see contao/core-bundle#528)
    <FilesMatch "\.(ttf|ttc|otf|eot|woff2?|font\.css)$">
        Header set Access-Control-Allow-Origin "*"
    </FilesMatch>
</IfModule>

<files serviceaccount.json>
Order allow,deny
Deny from all
</files>


<IfModule mod_rewrite.c>
    RewriteEngine On

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

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


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


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

    RewriteRule ^ %{ENV:BASE}/app.php [L]

</IfModule>

我根本看不到这些重定向是在哪里实现的。我还发现这个变体可以直接重定向。即使我将它们放在 htaccess 文件中,重定向仍然如上所述。

<IfModule mod_rewrite.c>
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
    RewriteRule (.*) https://www.%1/$1 [R=301,L]
</IfModule>

你能告诉我所有这些重定向是如何产生的以及为什么最后一个代码片段不起作用吗?

标签: .htaccessmod-rewritecontao

解决方案


其中一些重定向可能由您的 Hoster 完成。此外,在较新的 Contao 版本https中,如果在后端的相应网站根设置中启用了 HTTPS,则 Contao 会自动重定向到前端。

在任何情况下,您都应该自己实现重定向,例如在您的web/.htaccess. 例如:

# Redirect to www subdomain
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

注意: www 重定向将重定向任何不以www.to开头的域www.。如果您有一个具有不同子域的多域设置,则需要www.相应地调整重定向。


推荐阅读