Apache的htaccess重写规则如何转换为Nginx可用的rewrite指令?
问题原因
你遇到的404错误是因为Nginx rewrite规则未添加正确的flag标记,重写后的请求没有被转发到PHP处理逻辑,而是直接执行了try_files判断静态文件是否存在,自然找不到/123abc对应的实体文件。
修正方案
1. 修改location /块的rewrite规则
添加last标记,让重写后的请求重新匹配location规则,命中PHP处理块:
location / { # last标记作用:重写完成后终止当前location后续逻辑,重新匹配location规则 rewrite ^/([0-9a-f]{6})/?$ /index.php?t=$1 last; try_files $uri $uri/ =404; }
2. 补全PHP参数传递配置(可选,保险起见可添加)
确认查询参数能正确传递给PHP解释器,在PHP location块的include语句后额外添加一行参数配置:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include /etc/nginx/fastcgi_params; # 确保查询参数正常传递 fastcgi_param QUERY_STRING $query_string; }
生效操作
- 配置修改完成后,执行
nginx -t测试配置语法合法性 - 确认返回
syntax is ok、test is successful后,执行nginx -s reload重载配置即可生效
重载后访问/123abc就能和原路径/index.php?t=123abc一样正常加载页面。
内容的提问来源于stack exchange,提问作者MrMills
相关产品推荐
相关产品推荐

