You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写NGINX Rewrite规则去除URL中/filters/后的所有内容?

解决方案

得在Nginx的server块里,把下面这条rewrite规则放在location ~ ^/index\.php(/|$)前面,用来匹配带/filters/的URL,内部把请求重写到去掉/filters/及后面内容的路径,浏览器地址栏不会变。

规则代码:

rewrite ^(/.*)/filters/.*$ $1 last;

这条规则的逻辑:

  • 匹配所有以任意路径开头、后跟/filters/及任意内容的URL
  • 将请求的URI替换为/filters/之前的部分(比如/main-category/category/filters/price:0-100会被改成/main-category/category/)
  • last表示执行完这条规则后,重新匹配Nginx的location规则,确保请求能落到处理Symfony的PHP配置里

结合你现有配置,完整的server块示例:

server {
    listen 80;
    server_name domain.tld;
    root /path/to/your/symfony/public;

    # 先添加这条rewrite规则
    rewrite ^(/.*)/filters/.*$ $1 last;

    location ~ ^/index\.php(/|$) {
        include fastcgi_params;
        fastcgi_pass php_project:9000;
        fastcgi_read_timeout 600s;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }

    # 补充静态文件及默认路由处理
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
}

注意事项:

  • 规则必须放在PHP的location配置之前,否则Nginx会先匹配到PHP规则,这条重写不会生效
  • 如果需要在Symfony中读取过滤参数(比如价格范围),可以通过$_SERVER['REQUEST_URI']或者Symfony的Request对象获取原始URL后解析

内容的提问来源于stack exchange,提问作者Sander Drenth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:25:18