LINUX.ORG.RU

Как в nginx замутить единую точку входа?

 ,


0

2

Всем ку! В гуглояндексе по этой теме везде приводят такую конфигу:

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

Только ведь точка тут совсем не единая. Нужна конфига, где при любом поступившем uri , даже если там запрашивается какой-то несуществующий файл, или вообще белиберда какая, редиректило на /index.php?$args.

Пробовал так:

location / {
    rewrite ~* /index.php?$args;
}

- не дает эффекта.



Последнее исправление: a-lexx (всего исправлений: 1)

try_files нужен для статики.

Если у тебя нет статики ну сделай fastcgi_pass сразу в location /

surefire ★★★
()

даже если там запрашивается какой-то несуществующий файл

Ты вообще, каким органом читал документацию?

try_files как раз и нужен для входа в твою точку для несуществующих файлов.

В случае, если ни один файл не найден, то делается внутреннее перенаправление на uri, заданный последним параметром.

surefire ★★★
()
Последнее исправление: surefire (всего исправлений: 1)
Ответ на: комментарий от BaBL

А есть ли разница между этими способами?:

location / {
    try_files /index.php?$args;
}
location / {
    rewrite ^/(.*)$ /index.php;
}

У меня второй вариант работает сейчас. Но вот думаю, какой предпочтительней.

a-lexx
() автор топика
Ответ на: комментарий от BaBL

В try_files нельзя меньше двух аргументов.

anonymous
()

У меня сейчас для одной APIшечки так сделано:

location /v1 {
    rewrite ^/v1/(.*)$ /v1/blabla.php?url=$1;
}

Но вообще surefire прав, пихай fastcgi_pass в / если статики нет

MrClon ★★★★★
()

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

server {
    listen 80;
    server_name yourdomain.tld www.yourdomain.tld;
    charset utf-8;
    access_log /home/user/htdocs/yourdomain.tld/logs/access.log;
    error_log  /home/user/htdocs/yourdomain.tld/logs/error.log;
    if ($host != 'www.yourdomain.tld') {
        rewrite ^(.*)$ http://www.yourdomain.tld$1 permanent;
    }
    set $root_path '/home/user/htdocs/yourdomain.tld/public_html';
    root $root_path;
    index index.php index.html;
    location / {
        error_page 404 = @main;
        if (!-f $request_filename) {
            return 404;
        }
        location ~ /\.ht {
            return 404;
        }
        location ~ \.php$ {
            return 404;
        }
    }
    location @main {
        fastcgi_pass 127.0.0.1:9000;
        include /etc/nginx/fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $root_path/index.php;
        fastcgi_intercept_errors on;
    }
}

deep-purple ★★★★★
()

Что я подразумеваю под единой точкой:

1) если набирается корень домена domain.ex = попадаем на index.php
2) если набирается domain.ex/index.php = попадаем на index.php
3) если набираем любой существующий файл (кроме статики) = попадаем на index.php
4) если набираем любой несуществующий файл (нестатический) = попадаем на index.php
5) если набираем любой несуществующий файл (статический) = получаем 404

Для статичных файлов свой локейшн, остальные, которые в этот локейшн не попадают, считаются нестатичными.

Пока вот такую конфигу наваял, вроде пашет:

server {
	***

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

	location ~* \.(jpg|gif|png|ico|css|js|woff)$ {
		try_files $uri =404;
	}

	location = /index.php {
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		***
		fastcgi_pass unix:/home/g-project/service/php-fpm.sock;
	}
}
a-lexx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.