这是我当前的 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
而不是?
。
看这个文件了解详情。