Nginx rewrite规则优化:根目录WordPress搭配/dist目录Vue前端配置
优化后的Nginx配置方案
完全可以使用try_files指令实现需求,比当前使用的多段rewrite逻辑更清晰,也能避免优先级混乱的问题。
原有配置存在的问题
- 静态资源匹配规则过于宽泛,会拦截WordPress的
wp-content、wp-admin下的静态资源请求,重写到/dist目录导致后台样式、媒体资源加载失败 - 没有增加文件存在性判断,即使根目录存在对应WordPress的真实文件,也会被重写规则拦截
wp-json的rewrite使用break标识,会中断后续的PHP解析逻辑,导致接口无法正常返回- Vue路由的兜底逻辑不需要将路径作为query参数传递,history模式仅需要兜底到
index.html即可
最终配置示例
server { listen 80; server_name 你的站点域名; root /站点/WordPress根目录的绝对路径; index index.php index.html; # 1. 优先匹配wp-json请求,转发到WordPress入口处理 location ~* /wp-json/?(.*) { try_files $uri $uri/ /index.php$is_args$args; } # 2. WordPress后台路径额外兼容,保证后台跳转正常 location /wp-admin { try_files $uri $uri/ /index.php$is_args$args; } # 核心路由逻辑,对应要求的优先级2-4 location / { # 先检查根目录是否存在真实文件/目录,存在直接返回(满足wp-content等路径访问) # 不存在则尝试匹配/dist目录下的对应文件 # 还不存在则兜底到/dist/index.html,交给Vue路由处理 try_files $uri $uri/ /dist/$uri /dist/index.html; } # 常规PHP解析配置,WordPress必须配置,已配置过可直接复用 location ~ \.php$ { fastcgi_pass unix:/run/php/php你实际使用的版本-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
规则匹配逻辑说明
完全符合你提出的优先级要求:
- 所有带
wp-json的请求优先被匹配,直接转发到WordPress的index.php处理,接口可正常访问 - 所有请求首先判断根目录下是否存在对应真实文件/目录,存在直接返回,保证
wp-admin、wp-content等WordPress原生路径的所有资源正常加载 - 根目录不存在对应资源时,自动尝试去
/dist目录下查找对应静态资源,匹配到直接返回Vue的静态资源 /dist目录下也不存在对应资源时,自动兜底到/dist/index.html,Vue的history路由可正常工作,不会出现404问题
内容的提问来源于stack exchange,提问作者fatlinesofcode
相关产品推荐
相关产品推荐

