2016-07-04 4 views
2

Скажем, у меня есть файл с именем careers.php, как я служу этот файл при нажатии на ссылку, которая идет в http://example.com/careers без расширения файла для обоего .html и .php файлов с Nginx?Как удалить расширение файла из URL-адресов в nginx?

  1. Обратите внимание, что решение должно учитывать строки запроса. Например, URL-адрес может быть http://example.com/careers?lang=fr.

  2. Кроме того, я хотел бы, чтобы решение также попробовало подкаталоги. Например; если моя структура папок на сервере /views/careers.php, я хочу, чтобы http://example.com/careers все еще служил /views/careers.php.

Моя текущая конфигурация выглядит следующим образом:

server { 
    listen 80 default_server; 

    root /usr/share/nginx/landing-page; 
    index index.php index.html; 

    server_name example.com; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

ответ

1

Обычное решение использует try_files с именем места. Существующий блок location ~ \.php$ используется для обработки файлов .php. Также избегайте любых заявлений if.

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite^$uri.php last; 
} 
location ~ \.php$ { 
    try_files $uri =404; 
    ... 
} 
1

Вы можете использовать try_files:

try_files $uri $uri.php $uri/ =404; 
+0

Будет ли 'try_files $ uril $ uri.php /views/$uri.php $ uri/= 404;' работать для моей второй точки? Кроме того, это позволит использовать строки запроса? –

+1

@EdwardMaxedon да, строки запроса не будут затронуты. Для второй точки учтите, что '$ uri' будет содержать ведущую косую черту – Vasfed

+0

Я заметил теперь вместо обработки файла как .php-файл, он загружается, когда я посещаю страницу. Требуется также обновление блока 'location ~ \ .php $'? –

Смежные вопросы