@aI3x

Как совместить запуск php скриптов из разных директории?

Здравствуйте,

имеются директории:

/home/data/ - в этой папке находятся файлы (напр. index.php, conf.php, admin/index.php), которые нужно скрыть от юзера (но запускать он их может).
/home/user/ - в этой папке файлы юзера.

Задача:

ЕСЛИ (запрошенный http адрес соответствует файлу в папке /home/user/)
{
	ТО вернуть клиенту этот файл
}
ИНАЧЕ
{
	ЕСЛИ (файл /home/user/index.php существует)
	{
		ТО вызвать скрипт /home/user/index.php для обработки запроса
	}
	ИНАЧЕ
	{
		указать root -директорию /home/data/ и
		
		ЕСЛИ (запрошенный http адрес соответствует файлу в папке /home/data/)
		{
			ТО вернуть клиенту этот файл
		}
		ИНАЧЕ
		{
			вызвать скрипт /home/data/index.php для обработки запроса
		}
	}
}


Т.е. если юзер создает файл, например, /home/user/index.php, то при открытии сайта должен запускаться именно этот файл. Если же этого файла нет, то запускаться должен /home/data/index.php и тд. При этом в папках кроме php-файлов могут находиться файлы css, картинки и другие.

Подскажите пожалуйста рабочий конфиг для такой задачи.

Пробовал через try_files пока ничего не получается...

Конфиг для "одиночного" режима:

location / {
	index index.php;
	try_files $uri $uri/ /index.php?$query_string;
}

location /admin {
	try_files $uri /admin/index.php?$query_string;
}

location ~ [^/]\.php(/|$) {
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	if (!-f $document_root$fastcgi_script_name) {
		return  404;
	}
	fastcgi_pass    127.0.0.1:9023;
	fastcgi_index   index.php;
	include         /etc/nginx/fastcgi_params;
}
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 1
Keanor
@Keanor
Ведущий разработчик
А с чем собственно проблема?

Nginx тут не причем, все запросы должны идти в index.php, а оттуда с проверкой прав подключаться нужные скрипты, если разруливать через nginx у вас конфигов будет больше чем кода на php.

Определять что подключать через $_SERVER['REQUEST_URI'].

Проверять наличие файла нужно через file_exists

Запускать можно простым include (тут есть варианты, если нужно).

Сложности будут с безопасностью, решаемые, если хотите шарить доступы неограниченному кругу лиц.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы