Я перенаправляю пользователей моего сайта на HTTPS-версию сайта, используя перенаправление 301 с Nginx.
Я протестировал свой сайт с помощью PageSpeed от Google и обнаружил, что выполняю двойное перенаправление с главной страницы. Это из-за моей CMS. Пример:
http: // domain.tld -> NGINX 301 -> на https: // domain.tld -> CMS redirect -> https: // domain.tld / homepage
Я надеялся, что смогу перенаправить прямую корневую ссылку используя NGINX с
location = / {
return 301 https:// domain.tld/homepage;
}
, это работает для домашней страницы, однако это приведет к ошибке 404 на любой другой http-странице, кроме домашней, я попытался добавить return 301 https: // $ host $ request_uri;
под блок местоположения, но каким-то образом это перезаписывает правило корневого домена. (которые снова дают двойное перенаправление) Есть ли способ перенаправить все ссылки с их соответствующими request_uri, ЗА ИСКЛЮЧЕНИЕМ для корневого домена?
PS Я надеялся сделать это без функции if
: См .: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
Вот пример моего полного файла конфигурации:
server {
listen 80;
server_name domainname.tld;
location = / {
return 301 https://domainname.tld/homepage;
}
return 301 https://$host$request_uri;
#if i remove this I'll get 404 errors on any other page than the homepage.
#but if I add it, the 'location = /' block gets ignored.
}
server {
listen 443 ssl;
server_name domainname.tld;
root /var/www/domainname.tld;
index index.php;
... (stuff like rewrite rules, irrelevant) ...
}
Просто оберните его в блок location / {...}
, чтобы придать ему одинаковый приоритет:
server {
listen 80;
server_name domainname.tld;
location = / {
return 301 https://$server_name/homepage;
}
location / {
return 301 https://$server_name$request_uri;
}
}
См. этот документ для подробностей.
Вы можете использовать регулярное выражение для сопоставления только корневого URL-адреса, как это.
location ~ ^/$ {
return 301 https://domainname.tld/homepage;
}
Однако лучше оставить его с кодом 301, перенаправляющим только на сайт HTTPS, и код 302 из корня сайта HTTPS на / домашнюю страницу
. Вы же не хотите, чтобы поисковые системы кешировали постоянное перенаправление 301. Это плохая идея, потому что эта страница, скорее всего, со временем изменится.