Конфиг NGINX

nefone

Новичок
Есть приложение и точка входа находится в директории public/index.php
Там лежит файл .htaccess с настройками для Apache:
Apache:
#Установка кодировки
AddDefaultCharset utf-8

#Запрет на просмотр листинга папок
Options -Indexes

#Разрешение проходить по символическим ссылкам
Options +FollowSymLinks

#Включаем mod_rewrite
RewriteEngine on
#Если запрос идет не к файлу
RewriteCond %{REQUEST_FILENAME} !-f
#Если запрос идет не к существующей директории
RewriteCond %{REQUEST_FILENAME} !-d
#Тогда все запросы переадресовываются на index.php
RewriteRule ^(.*)$ index.php
Но при переходе на NGINX все ломается.
Подскажите настройки для NGINX что бы все запросы перенаправлялись на точку входа public/index.php
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что ломается, ты не можешь конфиг написать?
 

AnrDaemon

Продвинутый новичок
Ничего проще придумать невозможно.

charset UTF-8;
try_files $url $url/ @php;
location @php {
internal;
fastcgi_param SCRIPT_FILENAME .../index.php;
fastcgi_pass …;
}

Причём index.php может лежать где угодно за пределами вебрута. При использовании PHP-FPM с nginx это легко и просто.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Примерный конфиг, допилить напильником
Код:
server {
        listen   80;
        set $root '/var/www/path-to-website/public';
        server_name site.link;

        expires -1M;

        root   $root;
        index  index.php index.html index.htm;

        access_log  /var/log/nginx/site.access.log;
        error_log   /var/log/nginx/site.error.log;

        location / {
            # Turn off static files log
            location ~* ^.+\.(ico|css|js|jpg|jpeg|gif|png|zip|tgz|gz|rar|bz2|doc|xls|ppt|tar|ttf|woff)$ {
                access_log off;
                log_not_found off;
                error_log /dev/null crit;
            }

            try_files $uri $uri/ @rewrite;
        }

        location @rewrite {
                rewrite ^(.*)$ /index.php last;
        }

        location ~ \.php$ {
                fastcgi_pass   unix:/run/php/path-to-socket.sock;
                fastcgi_index  index.php;
                fastcgi_split_path_info  ^(.+\.php)(.*)$;
                fastcgi_param  SCRIPT_FILENAME  $root$fastcgi_script_name;
                include fastcgi_params;
        }
}
 

miketomlin

Новичок
Причём index.php может лежать где угодно за пределами вебрута.
Я бы даже сказал ДОЛЖЕН ЛЕЖАТЬ. Иначе можно нарваться на выдачу исходника фронта. Другие (рабочие) php-файлы тоже НЕ размещаем в пределах корня.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Автор коммента по ссылке выше не стал писать $uri/ и т.п.
Это уже зависит от целей и задач. Если мне нужен листинг каталога, я напишу $uri/, если нет - не буду. Если это тупо единая точка входа и картинки статикой, тогда, конечно, это будет лишним.
 
Сверху