求助:将Apache .htaccess规则转换为适配的Nginx配置指令
Apache 重写规则转Nginx适配方案
原规则核心逻辑
你提供的.htaccess规则实现的是单入口PHP系统的URL重写能力:
- 重写基准路径为
/public - 根路径请求统一交由
index.php处理 - 若请求路径不对应服务器上真实存在的文件或目录,全部转发到
index.php携带原请求路径做路由解析
修改后可直接使用的Nginx配置
注意:配置前请确认你站点
public目录的实际绝对路径,替换下方root配置项的路径值
server { listen 80; # 站点根目录指向public目录,符合原RewriteBase规则的路径基准,同时避免上层敏感文件被外网访问 root /var/www/html/public; index index.php index.html index.htm; server_name myhost.com; location / { # 按顺序匹配真实文件、真实目录,匹配不到则转发到入口文件处理 try_files $uri $uri/ /index.php$is_args$args; } # 兼容pathinfo格式,适配index.php/xxx这类请求传递 location ~ [^/]\.php(/|$) { include snippets/fastcgi-php.conf; fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; try_files $fastcgi_script_name =404; } }
配置生效操作
- 保存配置文件后,执行
nginx -t命令校验配置语法,确认无报错 - 语法校验通过后,执行
systemctl reload nginx重载Nginx配置即可生效
如果你因为特殊部署要求不能把站点根目录指向public文件夹,可将root改回原
/var/www/html路径,同时把location /块下的try_files规则替换为try_files $uri $uri/ /public/index.php$is_args$args;即可实现相同效果。
内容的提问来源于stack exchange,提问作者Farukh Zahoor
相关产品推荐
相关产品推荐

