Проблема с переключением PHP кода с Apache на Nginx - PullRequest
0 голосов
/ 09 июля 2020

На Apache у нас был URL-адрес типа MyUrl.com/UserId и в root index. php выполнялся код, который получил request_uri с UserId. В Nginx вместо этого он ищет папку с именем UserId, которой не существует. Как я могу изменить конфигурацию Nginx, чтобы по-прежнему использовать файл root index. php вместо поиска несуществующей папки?

Вот моя текущая nginx config:

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/MyUrl.com/before/*;

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name MyUrl.com;
root /home/forge/MyUrl.com;
rewrite_log on;

# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/MyUrl.com/766650/server.crt;
ssl_certificate_key /etc/nginx/ssl/MyUrl.com/766650/server.key;

ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.html index.htm index.php;

charset utf-8;

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/MyUrl.com/server/*;

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

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

access_log /var/log/nginx/MyUrl.com-access.log combined;
error_log  /var/log/nginx/MyUrl.com-error.log error;
error_page 404 /index.php;

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 180;
    include fastcgi_params;
}

location ~ /\.(?!well-known).* {
    deny all;
}

location /api/v1/ {
    rewrite_log on;
    index index.php;
    fastcgi_index index.php;
    error_page  405     =200 $uri;
    
    if (!-e $request_filename){
        rewrite /api/v1/(.*)$ /api/v1/api.php?request=$1 break;
    }
}

client_max_body_size 128M;
}

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/MyUrl.com/after/*;

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Apache и Nginx используют разные форматы конфигурации. Вам необходимо преобразовать то, что сейчас находится в вашем .htaccess файле, в формат, который понимает Nginx.

Это пример конфигурации Apache .htaccess:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

В Nginx это может выглядеть примерно так:

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

Для получения дополнительных сведений ознакомьтесь с этими вопросами:

Также этот инструмент может помочь с преобразованием:

0 голосов
/ 09 июля 2020

Это потому, что Apache htaccess отличается от Nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...