Nginx 重写:删除 filename.php 后面的 ?

Nginx 重写:删除 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?”。我应该编辑什么来删除末尾的“?”?

答案1

以下行将 添加到?以 结尾的任何外部呈现的 URI 的末尾.php

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

一个快速的解决方法是使用$is_args而不是?

这个文件了解详情。

相关内容