Nginx配置下WordPress wp-admin无法访问及页面404问题求助
WordPress站点Nginx配置问题解决
问题回顾
- WordPress安装目录:
/var/www/html/guce - 两种配置矛盾:
root设为/var/www/html/guce:前端链接正常,但wp-admin后台无法使用root设为/var/www/html:wp-admin后台正常,但仅首页可访问,其余链接返回404
修正后的Nginx配置
以下配置适配通过根域名(ikar.dev)直接访问子目录中WordPress的场景:
server { listen 80; server_name ikar.dev www.ikar.dev; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name ikar.dev www.ikar.dev; root /var/www/html; ssl_certificate /etc/letsencrypt/live/ikar.dev/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ikar.dev/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; client_max_body_size 50M; proxy_read_timeout 1200; proxy_send_timeout 1200; add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; index index.php index.html index.htm; location /nginx_status { stub_status on; access_log off; allow 192.81.216.136; deny all; } location ~ /\.ht { deny all; } # 主请求转发规则:将所有未匹配的请求导向guce目录的WordPress入口 location / { try_files $uri $uri/ /guce/index.php?$args; } # 处理guce目录下的PHP文件解析 location ~ ^/guce/.*\.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; } # 确保wp-admin请求正确映射到guce目录的后台文件 location ~ ^/wp-admin { try_files $uri $uri/ /guce/wp-admin/index.php?$args; } allow all; error_log /var/log/nginx/guce_error.log debug; access_log /var/log/nginx/guce_access.log; }
关键调整说明
- 前端404修复:原配置中
location /的try_files指向根目录/index.php,但WordPress入口在/guce/index.php,修改后所有无法匹配静态文件的请求都会转发到正确的入口文件,解决子页面404问题。 - 后台可用性修复:新增
location ~ ^/wp-admin规则,明确将后台请求导向/guce/wp-admin目录的文件,配合PHP解析规则,确保后台的动态文件能被正确处理。 - WordPress配置匹配:登录wp-admin后,进入「设置-常规」,确认:
- WordPress地址(URL):
https://ikar.dev/guce - 站点地址(URL):
https://ikar.dev
此配置保证WordPress内部路径生成与Nginx规则一致,避免跳转或资源加载错误。
- WordPress地址(URL):
备选场景配置(子路径访问)
若希望通过ikar.dev/guce访问站点,可调整为以下配置:
server { listen 80; server_name ikar.dev www.ikar.dev; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name ikar.dev www.ikar.dev; root /var/www/html; ssl_certificate /etc/letsencrypt/live/ikar.dev/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ikar.dev/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; client_max_body_size 50M; proxy_read_timeout 1200; proxy_send_timeout 1200; add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; index index.php index.html index.htm; location /nginx_status { stub_status on; access_log off; allow 192.81.216.136; deny all; } location ~ /\.ht { deny all; } # 仅处理guce路径下的请求 location /guce { try_files $uri $uri/ /guce/index.php?$args; } # 解析guce目录下的PHP文件 location ~ ^/guce/.*\.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; } allow all; error_log /var/log/nginx/guce_error.log debug; access_log /var/log/nginx/guce_access.log; }
同时将WordPress的「WordPress地址(URL)」和「站点地址(URL)」均设为https://ikar.dev/guce即可。
内容的提问来源于stack exchange,提问作者Joel Mutete
相关产品推荐
相关产品推荐

