nginx (или нет) как перенаправить подсистему

Вопрос или проблема

У меня был старый сайт по адресу www.billoblog.com, который в основном обслуживал небольшую группу судебной патологии. Я перенес его на wordpress.forensicpath.us. Я обслуживаю оба сайта на одном виртуальном сервере и перенаправляю с billoblog на forensicpath.

Это работает нормально, и люди, которые заходят на www.billoblog.com/wordpress, перенаправляются на wordpress.forensicpath.us.

Однако старые ссылки на конкретную страницу не перенаправляются корректно. Причина в том, что на старом сайте нужно было указывать браузеру прямую ссылку на billoblog.com/wordpress, а не просто billoblog.com. Старые ссылки, по сути, имеют дополнительное “wordpress”.

Например, страница, демонстрирующая поражение (гепатоцитарная некроз), находится по адресу:

https://wordpress.forensicpath.us/index.php/2020/10/24/pathology-cases-focal-hepatocellular-necrosis/

Однако старые ссылки на “billoblog.com/wordpress/index.php/2020/10/24/pathology-cases-focal-hepatocellular-necrosis/

перенаправляются на
https://wordpress.forensicpath.us/wordpress/index.php/2020/10/24/pathology-cases-focal-hepatocellular-necrosis/

Это приводит к ошибке 404 из-за лишнего “wordpress” перед index.php.

Я не могу понять, как это перенаправить. Я пытался:

Создать символьную ссылку в директории wordpress на саму себя, т.е. ln -s . wordpress. Это ничего не дало.

Создать директорию “wordpress” в директории wordpress и поставить файл htaccess для перенаправления. Это не сработало, потому что выдало “запрещено”, даже при правильных настройках прав собственности и прочего.

Я пытался заставить nginx перенаправить, но явно не понимаю, что делаю.

Я не знаю, что делать.

Вот мой файл nginx из sites-available для billoblog.com:

# доступен под путем с именем пакета, таким как /drupal8.
#
# Пожалуйста, смотрите /usr/share/doc/nginx-doc/examples/ для более подробных примеров.
#
# Конфигурация сервера по умолчанию
#
server {

        # Конфигурация SSL
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Примечание: Вы должны отключить gzip для SSL-трафика.
        # См.: https://bugs.debian.org/773332
        #
        # Узнайте о ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
        # См.: https://bugs.debian.org/765782
        #
        # Самоподписанные сертификаты, сгенерированные пакетом ssl-cert
        # Не используйте их на производственном сервере!
        #
        # include snippets/snakeoil.conf;

        root /var/www/billoblog.com/html;

        # Добавьте index.php в список, если вы используете PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name billoblog.com www.billoblog.com;

        rewrite ^/(.*)$ http://wordpress.forensicpath.us/$1 permanent;


        location / {
                # Сначала попытка обслужить запрос как файл, затем
                # как директорию, затем вернуться к отображению 404.
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php;
        }

        # передать PHP скрипты на сервер FastCGI
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                # добавлено из linuxbabe.com/ubuntu/install-lemp-stack-ubuntu-24-04-server-desktop
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        # запретить доступ к файлам .htaccess, если корневая директория Apache
        # совпадает с nginx
        #
        # запретить доступ к файлам .htaccess, если корневая директория Apache
        # совпадает с nginx
        #
        location ~ /\.ht {
                #deny all;

        location ~ /.well-known/acme-challenge {
         allow all;
      }

        }



    access_log /var/log/nginx/billoblog.com.access.log;
    error_log /var/log/nginx/billoblog.com.error.log;



    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/billoblog.com-0001/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/billoblog.com-0001/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot


Вот файл sites-available для forensicpath.us:

# Вам следует ознакомиться со следующими URL, чтобы глубже понять
# файлы конфигурации Nginx и полностью использовать мощь Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удаляют этот файл из sites-enabled/
# и оставляют его как ссылку внутри sites-available, где он будет продолжать
# обновляться командой упаковки nginx.
#
# Этот файл автоматически загрузит файлы конфигурации, предоставленные другими
# приложениями, такими как Drupal или WordPress. Эти приложения будут доступны
# под путем с именем пакета, таким как /drupal8.
#
# Пожалуйста, смотрите /usr/share/doc/nginx-doc/examples/ для более подробных примеров.
##
# Конфигурация сервера по умолчанию
#
server {

        # Конфигурация SSL
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Примечание: Вы должны отключить gzip для SSL-трафика.
        # См.: https://bugs.debian.org/773332
        #
        # Узнайте о ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
        # См.: https://bugs.debian.org/765782
        #
        # Самоподписанные сертификаты, сгенерированные пакетом ssl-cert
        # Не используйте их на производственном сервере!
        #
        # include snippets/snakeoil.conf;

        root /var/www/forensicpath.us/html;

        # Добавьте index.php в список, если вы используете PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name forensicpath.us www.forensicpath.us mail.forensicpath.us;

        location / {
                # Сначала попытка обслужить запрос как файл, затем
                # как директорию, затем вернуться к отображению 404.
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php;
        }

        # передать PHP скрипты на сервер FastCGI
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                # добавлено из linuxbabe.com/ubuntu/install-lemp-stack-ubuntu-24-04-server-desktop
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        # запретить доступ к файлами .htaccess, если корневая директория Apache
        # совпадает с nginx
        #
        location ~ /\.ht {
                deny all;


        location ~ /.well-known/acme-challenge {
         allow all;
      }

        }



    access_log /var/log/nginx/forensicpath.us.access.log;
    error_log /var/log/nginx/forensicpath.us.error.log;






    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/www.forensicpath.us/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.forensicpath.us/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot



}


server {
    if ($host = mail.forensicpath.us) {
        return 301 https://$host$request_uri;
    } # управляется Certbot


    if ($host = www.forensicpath.us) {
        return 301 https://$host$request_uri;
    } # управляется Certbot


    if ($host = forensicpath.us) {
        return 301 https://$host$request_uri;
    } # управляется Certbot



        server_name forensicpath.us www.forensicpath.us mail.forensicpath.us;
    listen 80;
    return 404; # управляется Certbot

Вот файл conf.d с wordpress.forensicpath.us:


#
server {
   server_name wordpress.forensicpath.us;
   root /var/www/forensicpath.us/html/wordpress;
   index index.php;
   disable_symlinks off;
   server_tokens off;
   client_max_body_size 64M;
location / {
   try_files $uri $uri/ /index.php?$args;
}
   location ~ \.php$ {
      fastcgi_pass  unix:/run/php/php8.3-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include /etc/nginx/fastcgi.conf;
   }
   access_log /var/log/nginx/wordpress.forensicpath.us.access.log;
    error_log /var/log/nginx/wordpress.forensicpath.us.error.log;





    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/wordpress.forensicpath.us/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/wordpress.forensicpath.us/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot

}
server {
    if ($host = wordpress.forensicpath.us) {
        return 301 https://$host$request_uri;
    } # управляется Certbot


   server_name wordpress.forensicpath.us;
    listen 80;
    return 404; # управляется Certbot


}

Любая помощь будет оценена…

Ответ или решение

Для решения проблемы с перенаправлением из подкаталога "wordpress" на новый сайт, вам нужно настроить конфигурацию Nginx так, чтобы все ссылки, содержащие "billoblog.com/wordpress", перенаправлялись на соответствующие страницы на "wordpress.forensicpath.us" без параметра "wordpress". Это предотвратит ошибку 404, с которой вы столкнулись ранее. Ниже приведены шаги и пример конфигурации, которые помогут вам решить эту задачу.

Шаги по перенаправлению

  1. Изменение конфигурации сервера Nginx для billoblog.com:
    Вам необходимо отредактировать конфигурацию виртуального хоста для billoblog.com, чтобы добавить новое правило перенаправления. Вы можете использовать директиву rewrite, чтобы обрабатывать запросы, которые включают "wordpress".

  2. Настройка правила перенаправления:
    Добавьте следующее правило в блок серверной конфигурации для billoblog.com:

server {
    listen 443 ssl;
    server_name billoblog.com www.billoblog.com;

    # Остальная часть конфигурации...

    # Правило для перенаправления страниц с /wordpress
    rewrite ^/wordpress/(.*)$ https://wordpress.forensicpath.us/$1 permanent;

    # Другие правила...
    location / {
        try_files $uri $uri/ /index.php;
    }
}

Пример полной конфигурации для billoblog.com

Вот обновленная конфигурация Nginx для billoblog.com с включенным правилом перенаправления:

server {
    listen 443 ssl;
    server_name billoblog.com www.billoblog.com;

    root /var/www/billoblog.com/html;
    index index.php index.html index.htm index.nginx-debian.html;

    # Перенаправление для всех запросов с /wordpress
    rewrite ^/wordpress/(.*)$ https://wordpress.forensicpath.us/$1 permanent;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    access_log /var/log/nginx/billoblog.com.access.log;
    error_log /var/log/nginx/billoblog.com.error.log;

    ssl_certificate /etc/letsencrypt/live/billoblog.com-0001/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/billoblog.com-0001/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Применение изменений

После внесения изменений в конфигурационный файл, не забудьте протестировать конфигурацию Nginx на наличие ошибок. Вы можете сделать это с помощью команды:

sudo nginx -t

Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу:

sudo systemctl reload nginx

Заключение

Теперь любые запросы, содержащие "billoblog.com/wordpress", будут автоматически перенаправляться на соответствующий URL без "wordpress" с помощью перенаправления 301. Это обеспечит правильную работу старых ссылок и предотвратит ошибку 404.

Если вы столкнетесь с любыми трудностями в этом процессе или будут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...