Звонок на страницу PHP, обслуживаемую nginx, без использования расширения файла - PullRequest
2 голосов
/ 28 мая 2020

Я уверен, что это действительно простой ответ, но я просто не могу его разгадать. Я также новичок в nginx, но довольно хорошо разбираюсь в apache2. Я запускаю nginx на Ubuntu и пытаюсь выполнить эти два запроса:

  1. get nginx для обслуживания filename.php, когда URI вызывает filename
    1. Calling http://example.org/bob будет обслуживать http://example.org/bob.php, но по-прежнему http://example.org/bob отображается в URL-адресе браузера
  2. , когда папка запрашивается, "индекс" не отображается в URL-адресе
    1. Вызов http://example.org/jack/ будет обслуживать http://example.org/jack/index.php но http://example.org/jack/ по-прежнему отображается в URL-адресе (а не http://example.org/jack/index)

Моя текущая конфигурация:

server {
    listen 80;
    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ @php;
    }

    location @php {
        try_files $uri.php =404;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi.conf;
    }

    rewrite ^/(.*)\.php$ /$1 redirect;

    location ~ /\.ht {
        deny all;
    }
}

Мне кажется, что я действительно близок, требование (1) работает безупречно, но я не могу найти правильную конфигурацию для выполнения требования (2).

Если это помогает, это конфигурация, которая работает в Apache2, с включенным модулем mod_rewrite:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d       # if a folder isn't called ...
RewriteCond %{REQUEST_FILENAME}.php -f    # but a php file is ...
RewriteRule ^(.*)$ $1.php                 # take the basename, add .php then call that

1 Ответ

1 голос
/ 28 мая 2020

Смотрите, это может помочь вам включить правило перезаписи Apache2 для nginx правил:

https://www.nginx.com/blog/converting-apache-to-nginx-rewrite-rules/

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