Вот моя текущая конфигурация сайта 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
вместо ?
.
См. этот документ для подробностей.
.