Назад | Перейти на главную страницу

Nginx rewrite: удалить? после 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?». Что бы я отредактировал, чтобы убрать конец "?"?

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

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

Быстрое решение - использовать $is_args вместо ?.

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