Nginx下子目录(/tips)中WordPress运行异常求助
修复Ubuntu 16.04 Nginx下WordPress子目录/tips的访问问题
我来帮你搞定这个WordPress子目录的Nginx配置问题,看起来你现在的规则有点混乱,导致浏览器兼容性问题(Edge完全无法访问、Chrome勉强可用)。咱们一步步来修复:
关键问题分析
你当前配置里的全局rewrite ^/tips/(.*) /tips/index.php?$args;和后面的rule_3相关if判断,是导致问题的核心。Nginx的if指令行为经常不符合直觉,全局rewrite还会打乱WordPress的URL解析逻辑,干扰静态资源和PHP请求的正常处理。
修复步骤
- 移除冗余规则:删掉针对
/tips的全局rewrite和所有rule_3相关的if判断,这些规则会和WordPress的路由逻辑冲突。 - 添加专属子目录规则:用Nginx推荐的
try_files指令,为/tips目录单独配置路由,确保该目录下的动态请求和静态资源都能被正确处理。 - 确保PHP请求分流正确:在
/tips的location块内嵌套PHP处理规则,保证子目录下的PHP文件能正确传递给PHP-FPM。
修改后的完整Nginx配置
server { listen 443 ssl; server_name www.domain.co.uk; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; root /var/www/domain.co.uk; index index.php; ssl on; ssl_certificate /etc/nginx/ssl/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/www_domain_co_uk.key; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4"; ssl_prefer_server_ciphers on; # 主站路由规则 location / { try_files $uri $uri.html $uri/ =404; } # WordPress子目录/tips专属路由规则 location /tips/ { try_files $uri $uri/ /tips/index.php?$args; # 处理/tips目录下的PHP请求 location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php5.6-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } } # 主站PHP请求处理规则 location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php5.6-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } # 静态资源缓存优化 location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; log_not_found off; expires 30d; } }
最后要做的检查
- 登录WordPress后台,进入设置 -> 常规,确认两个URL设置:
- 站点地址(URL):
https://www.domain.co.uk/tips - WordPress地址(URL):
https://www.domain.co.uk/tips
- 站点地址(URL):
- 执行
sudo nginx -t检查配置语法是否正确,没问题的话重启Nginx:sudo systemctl restart nginx - 清除浏览器缓存(尤其是Edge的缓存)后再测试访问。
这样调整后,Nginx会正确处理/tips目录下的所有请求,浏览器兼容性问题也会得到解决。
内容的提问来源于stack exchange,提问作者JoshGeake
相关产品推荐
相关产品推荐

