При переходе с Apache на nginx возникла проблема с ЧПУ
Проект разработан на php. При попытке перехода с apache на nginx возникла проблема с ЧПУ.
В apache конфиг был следующий:
Options All -Indexes
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
Для nginx я использовал:
try_files $uri $uri/ /index.php?$query_string;
Это спасло частично ситуацию.
При попадании на сайт "http://site.com/" и "http://site.com/../../" и тд путь в константе "__DIR__" указывается до директории где лежит основная часть логике, а когда http://site.com/admin/ в константе указывается путь до директории где лежит другая логика проекта admin.
Вся проблема в том что когда добавляется после "http://site.com/admin/" (http://site.com/admin/../../) ещё один сегмент url в константе получается путь до основной директории а не до admin.
Пример как должен выглядеть путь в константе: /var/www/test-app/admin/ В моём случае /var/www/test-app/
Я пытался разобраться как написать так чтобы всё работало но не получилось.
Ответы (2 шт):
Добавьте в конфиг Nginx:
location ^~ /admin {
try_files $uri $uri/ /admin/index.php?$query_string;
}
А указанную в вопросе директиву try_files поместите в location /
Отвечу сам на свой вопрос. Решения пришло следующие.
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
server_tokens off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location @phalcon {
rewrite ^/admin/(.+)$ /admin/index.php?$args=$1 last;
}
location /admin/ {
index index.php;
if ($uri !~ ^/admin) {
rewrite ^/admin(.*)$ /admin$1;
}
try_files $uri $uri/ @phalcon;
}
}
Nginx полностью настраивал я и данный конфиг находиться в /etc/nginx/conf.d/default.conf.
То есть я просто добавил
location @phalcon {
rewrite ^/admin/(.+)$ /admin/index.php?$args=$1 last;
}
location /admin/ {
index index.php;
if ($uri !~ ^/admin) {
rewrite ^/admin(.*)$ /admin$1;
}
try_files $uri $uri/ @phalcon;
}
Теперь следующий вопро можно ли упростить это или есть более простое решение? Причина в том что кроме директории admin есть и другие.