Очень часто для SEO оптимизации сайта требуется настройка редиректов во избежании всевозможных дублей. Бич которым страдают даже поисковые машины это множественный слэш в конце, к пример google.de//// как же сделать редиректы с множественных слэшей на домен? Или как убрать на сайте ссылку вида haubau.pro/index.php при открытии которой открывается главная страница? На самом деле всё это делается путём настройки сервера. В своём примере я приведу настройку конфигурации сервера под nginx. Вот мой файл конфигурации:
server {
merge_slashes off; #убираем множественные слэшы ///// с главной страницы
server_name сайт.com www.сайт.com;
charset UTF-8;
index index.html index.php;
if ($request_uri ~* "^(.*/)index\.php$") { # делаем редирект с index.php на корень сайта
return 301 $1;
}
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/сайт.com/*.conf;
access_log /var/www/httpd-logs/сайт.com.access.log;
error_log /var/www/httpd-logs/сайт.com.error.log notice;
ssi on;
set $root_path /var/www/аккаунт/data/www/сайт.com/папка_с_приложением/public;
listen 192.168.0.1:80;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
try_files $uri $uri/ /index.php?$query_string; # добавляем для работы чпу в Laravel 5.3
rewrite ^/(.*)/$ /$1 redirect; # делаем редирект на роуты без слэшей
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
fastcgi_pass unix:/var/www/php-fpm/аккаунт.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
set $root_path /var/www/аккаунт/data/www/сайт.com/папка_с_приложением/public;
return 301 https://$host:443$request_uri;
root $root_path;
}
server {
merge_slashes off; #убираем множественные слэшы ///// с главной страницы
server_name сайт.com www.сайт.com;
ssl on;
ssl_certificate "/var/www/httpd-cert/аккаунт/сайт.com_le1.crtca";
ssl_certificate_key "/var/www/httpd-cert/аккаунт/сайт.com_le1.key";
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";
charset UTF-8;
index index.html index.php;
if ($request_uri ~* "^(.*/)index\.php$") { # делаем редирект с index.php на корень сайта
return 301 $1;
}
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/сайт.com/*.conf;
access_log /var/www/httpd-logs/сайт.com.access.log;
error_log /var/www/httpd-logs/сайт.com.error.log notice;
ssi on;
set $root_path /var/www/аккаунт/data/www/сайт.com/папка_с_приложением/public;
listen 192.168.0.1:443;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
rewrite ^/(.*)/$ /$1 permanent; # делаем редирект на роуты без слэшей
try_files $uri $uri/ /index.php?$query_string; # добавляем для работы чпу в Laravel 5.3
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
fastcgi_pass unix:/var/www/php-fpm/аккаунт.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
#try_files $uri =404;
include fastcgi_params;
}
set $root_path /var/www/аккаунт/data/www/сайт.com/папка_с_приложением/public;
root $root_path;
}
Что же мы в итоге получаем из этого конфига? Во первых редиректы с domain.tld/index.php на domain.tld. Во вторых редиректы с роутов domain.tld/login/ на domain.tld/login и наконец самый распространённый баг на множестве движков это редирект с domain.tld////// на domain.tld В конфиге написал что и где прописано
Laravel 5.3: настраиваем редиректы, удаляем дубли
20 сентября 2016, 12:21
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()