我已经分析了我的网站与门户web.dev从谷歌。这告诉我,我有太多的重定向,如果我调用没有www和http的URL:它首先到https和没有www,然后到http与www,然后才到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>
你能告诉我这些重定向是怎么来的吗,为什么最后的代码片段不能用?
有些重定向可能是由你的主机完成的。另外,在Contao的新版本中,Contao会自动重定向至 https
前端,如果HTTPS在后端网站根的设置中被启用。
在任何情况下,你应该自己实现重定向,例如在你的 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.
到 www.
. 如果你有一个多域名的设置,有不同的子域名,你将需要调整你的 www.
相应的重定向。