Назад | Перейти на главную страницу

Переписать расширения файлов в NGiNX

Я хочу показать файл вроде domain.com/login вместо domain.com/login.php

Конфигурация моего сайта NGiNX:

#02API

server {
  # listen 80 deferred; # for Linux
  # listen 80 accept_filter=httpready; # for FreeBSD
  listen 80;

  # The host name to respond to
  server_name api.api.com;

  # Path for static files
  root /app/api/api;

  # Try static files first, then php
  index index.html index.htm index.php;

  # Specific logs for this vhost
  access_log /app/api/log/log-api-access.log;
  error_log  /app/api/log/log-api-error.log error;

  #Specify a charset
  charset utf-8;

  # Redirect needed to "hide" index.php
  location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  # Don't log robots.txt or favicon.ico files
  location ~* ^/(favicon.ico|robots.txt)$ {
    access_log off;
    log_not_found off;
  }
  # Custom 404 page
  error_page 404 /404.html;

  location ~* ^.+.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv|xml) {
    access_log off;
    expires 30d;
  }

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

  # Deny access to .htaccess
  location ~ /\.ht {
    deny all;
  }

  # Include the basic h5bp config set
  include h5bp/basic.conf;
}

Но каждый раз пытаюсь: domain.com/login

файл загружается, но domain.com/login.php явно показывает содержимое файла php.

есть ли способ решить эту проблему?

Спасибо

Если вы хотите использовать аргумент try_files для добавления .php в конец запрошенного URL-адреса, попробуйте заменить строку try_files на:

try_files $uri $uri/ $uri.php?$args;

В качестве альтернативы вы можете добавить перезаписи для каждого отдельного URL-адреса, который вы хотите переписать, но это может стать беспорядочным в зависимости от того, для скольких файлов вы хотите это сделать.