Вопрос или проблема
У меня был старый сайт по адресу www.billoblog.com, который в основном обслуживал небольшую группу судебной патологии. Я перенес его на wordpress.forensicpath.us. Я обслуживаю оба сайта на одном виртуальном сервере и перенаправляю с billoblog на forensicpath.
Это работает нормально, и люди, которые заходят на www.billoblog.com/wordpress, перенаправляются на wordpress.forensicpath.us.
Однако старые ссылки на конкретную страницу не перенаправляются корректно. Причина в том, что на старом сайте нужно было указывать браузеру прямую ссылку на billoblog.com/wordpress, а не просто billoblog.com. Старые ссылки, по сути, имеют дополнительное “wordpress”.
Например, страница, демонстрирующая поражение (гепатоцитарная некроз), находится по адресу:
Однако старые ссылки на “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, с которой вы столкнулись ранее. Ниже приведены шаги и пример конфигурации, которые помогут вам решить эту задачу.
Шаги по перенаправлению
-
Изменение конфигурации сервера Nginx для billoblog.com:
Вам необходимо отредактировать конфигурацию виртуального хоста дляbilloblog.com
, чтобы добавить новое правило перенаправления. Вы можете использовать директивуrewrite
, чтобы обрабатывать запросы, которые включают "wordpress". -
Настройка правила перенаправления:
Добавьте следующее правило в блок серверной конфигурации для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.
Если вы столкнетесь с любыми трудностями в этом процессе или будут дополнительные вопросы, не стесняйтесь обращаться за помощью.