Избегайте множественных перенаправлений в contao - PullRequest
0 голосов
/ 06 мая 2020

Я проанализировал свой веб-сайт с помощью портала web.dev от Google. Это говорит мне о том, что у меня слишком много перенаправлений, если я вызываю URL без www and с http: он сначала переходит на https и без www, затем на http с www and, только затем на 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>

Можете ли вы рассказать мне, как происходят все эти перенаправления и почему последний фрагмент кода не работает?

1 Ответ

0 голосов
/ 06 мая 2020

Некоторые из этих перенаправлений могут быть выполнены вашим Хостером. Кроме того, в более новых версиях Contao Contao автоматически перенаправляет на https во внешнем интерфейсе, если HTTPS включен в настройках соответствующего веб-сайта root в серверной части.

В любом случае вам следует реализовать перенаправление самостоятельно, например, в вашем 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 redirect перенаправит любой домен , который не начинается с www., на www.. Если у вас есть мультидоменная настройка с разными поддоменами, вам нужно будет соответствующим образом настроить перенаправление www..

...