2016-03-19 4 views
1

Я действительно не нахожу документацию, которую я нахожу понятным в отношении перезаписи URL-адресов (я не могу это понять, так как неожиданно считаю, что документация очень трудно читать для не-родной).Различная переписывание URL-адресов в соответствии с местоположениями

Я ищу способ переписать все маршруты, который соответствует /*\.(js|png|jpg|css|ttf|xml)$/ к path/media/ и попытаться существования файла затем вернуть его, если существует, иначе 404 not found

тогда, если она начинается с /ajax/ перенаправлять все это в сторону path/ajax/index.php иначе перенаправить все это на path/www/index.php

Я не совсем понимаю, как это сделать, пока я создал 3 местоположения/media /,/ajax/и/www /, но я не знаю, является ли это правильный способ использовать переписать, а не возвращать, или это места, где это правильный способ.

Я действительно не понимаю, что я написал в своем sites-enabled/file относительно fastcgi. это путь интерпретации?

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

Если я правильно, это означает, что «если он заканчивается .php, и он существует в иерархии, а затем выполнить его».

И я не знаю, должен ли я помещать такие вещи для каждого места, которое должно иметь дело с php (/ www/и/ajax /), тем более, что я собираюсь сделать некоторую маршрутизацию для обоих. Более того, я не знаю, должно ли это быть сделано именно так.

ответ

1

Простейших конфигураций PHP использует общую root директивы, которая наследуется блоками местоположения, и в вашем случае будет:

root path; 

Это означает, что /www/index.php и /ajax/index.php оба обработаны location ~ \.php$ блока.

действие по умолчанию может быть определено try_files директивы в location / блока:

location/{ 
    try_files $uri $uri/ /www/index.php; 
} 

Если вам нужно другое действие по умолчанию для URI, которые начинаются с /ajax, добавить более конкретное местоположение:

location /ajax { 
    try_files $uri $uri/ /ajax/index.php; 
} 

Если вы не хотите, чтобы ваши URI носителей начинались с /media, вы можете переопределить root по одному конкретному адресу:

location ~* \.(js|png|jpg|css|ttf|xml)$ { 
    root path/media; 
} 

Директивы и fastcgi_index не нужны в вашем конкретном случае. include fastcgi_params; заявление должно быть перед любым fastcgi_param директивы, чтобы избежать последнего непреднамеренного переопределены:

location ~ \.php$ { 
    try_files $uri =404; 
    include fastcgi_params; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

nginx documentation Смотрите подробности.