Включение как постоянных ссылок, так и маршрутизации php без расширения, не работающей в Nginx


У меня есть мой файл nginx.conf следующим образом:

server {
    ...    
root /var/www/html;

            # Add index.php to the list if you are using PHP
            index index.php index.html index.htm index.nginx-debian.html;

            server_name mydomain.com;

            if (!-e $request_filename)
            {
             rewrite ^.*$ /index.php last;
            }


            location / {

                    try_files $uri $uri/ @extensionless-php;
            }


            location ~ \.php$ {
                    try_files $uri =404;
                    include snippets/fastcgi-php.conf;
                    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            }

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

У меня установлен WordPress на Nginx на запущенном сервере Ubuntu.

У меня есть навигационное меню с именем Резюме, которое ведет к example.com/resume и показывает файл pdf, который на самом деле myname_resume.pdf, но я вставил resume.php в корневом каталоге, и этот php-скрипт получает содержимое myname_resume.pdf и отображает его в виде файла pdf.

Я хочу, чтобы мой URL-адрес никогда не добавлял никаких файлов расширение .pdf или .php независимо от того, можете ли вы кто-нибудь написать url.php и это дало бы тот же результат, и поэтому я сделал это. Эта конфигурация extensionless-php работала нормально, когда я вставил этот код:

if (!-e $request_filename)
{
    rewrite ^.*$ /index.php last;
}

Поскольку у меня установлен WordPress, я хотел дать постоянную ссылку на страницу, созданную на WordPress, как example.com/contact и для включения постоянной ссылки мне пришлось добавить выше небольшую конфигурацию. Теперь постоянная ссылка открывается, но mydomain.com/resume выдает ошибку 404. Как включить их оба или есть ли какой-нибудь хороший метод для достижения того же самого?

Author: Anh Tuan, 2018-01-18

1 answers

Вместо добавления .php к любым несуществующим файлам - вы можете изменить логику так, чтобы .php добавлялся в URI только в том случае, если файл PHP действительно существует.

Например:

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    if (-f $request_filename.php) {
        rewrite ^ $uri.php last;
    }
    rewrite ^ /index.php last;
}
location ~ \.php$ {
    try_files $uri =404;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

См. это предупреждение об использовании if.

 0
Author: Richard Smith, 2018-01-18 16:48:34