Включение как постоянных ссылок, так и маршрутизации 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. Как включить их оба или есть ли какой-нибудь хороший метод для достижения того же самого?
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
.