Nginx rewrite: remove? после filename.php

Вот моя текущая конфигурация сайта nginx:

server {
server_name DOMAIN;
access_log /srv/www/DOMAIN/logs/access.log;
error_log /srv/www/DOMAIN/logs/error.log;
root /srv/www/DOMAIN/public_html;

location / {
    if ($request_uri ~ ^/(.*)\.html$) {  return 302 /$1;  }
    try_files $uri $uri.html $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    if ($request_uri ~ ^/([^?]*)\.php($|\?)) {  return 302 /$1?$args;  }
    try_files $uri =404;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

}

Итак, проблема, которую я не могу понять, заключается в том, что когда я получаю доступ к веб-странице, такой как "mydomain.com/filename.php", URL-адрес будет записан на «mydomain.com/filename?». Что бы я отредактировал, чтобы убрать конец «?»?

2
задан 5 February 2016 в 00:27
1 ответ

Следующая строка добавляет ? в конец любого внешнего URI, заканчивающегося на .php:

if ($request_uri ~ ^/([^?]*)\.php($|\?)) {  return 302 /$1?$args;  }`.

Быстрое исправление будет заключаться в использовании $is_args вместо ? .

См. этот документ для подробностей.

.
1
ответ дан 3 December 2019 в 12:42

Теги

Похожие вопросы