В NGINX удалите расширение .html из URI без перенаправления - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь изменить мою конфигурацию NGINX, чтобы убрать расширение .html из URI, прежде чем они будут переданы в мою CMS на основе PHP.

Другими словами, когда посетитель вводит:

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;
    }

Используя этот код, REQUEST_URI, который получает PHP, по-прежнему /foo.html.

1 Ответ

0 голосов
/ 27 сентября 2019

Возможный ответ на мой вопрос или, по крайней мере, обходной путь.

Таким образом, очевидно, что $ 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...