【问题标题】:In NGINX remove .html extension from URI without redirect在 NGINX 中,从 URI 中删除 .html 扩展名而不进行重定向
【发布时间】:2019-09-27 13:33:30
【问题描述】:

我正在尝试修改我的 NGINX 配置,以便在将 URI 的 .html 扩展名传递给基于 PHP 的 CMS 之前将它们剥离。

换句话说,当访问者进入时:

http://www.example.com/foo.html

我希望将 URI 更改为 /;

http://www.example.com/foo

没有进行实际的浏览器重定向。这在 Apache 中很容易完成,但我似乎无法在 NGINX 中解决问题。这是我的配置文件中似乎不起作用的内容。

    location ~ \.html {
            rewrite ^(/.*)\.html(\?.*)?$ $1$2 last;
    }

    location / {
        try_files $uri $uri/  /index.php;       
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   REQUEST_URI     $request_uri;
        fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }

使用此代码,PHP 获取的 REQUEST_URI 仍然是 /foo.html。

【问题讨论】:

    标签: regex nginx webserver uri


    【解决方案1】:

    我自己的问题的可能答案,或者至少是一种解决方法。

    显然 $request_uri 总是会包含原始 URI,而不是重写 - 包含在 $uri 中。因此,为了解决这个问题,我使用一个变量来存储修改后的 URI 并将其传递给 PHP。不过,我对这个解决方案并不是很兴奋。

    location ~ \.html {
                rewrite ^(/.*)\.html(\?.*)?$ $1$2 last;
        }
    
        location / {
            set $new_uri $uri
            try_files $uri $uri/  /index.php;       
        }
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            include         fastcgi_params;
            fastcgi_param   REQUEST_URI     $new_uri;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 2020-11-08
      • 2016-07-22
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多