Переписываю файлы nginx try_files


8

Я пытаюсь преобразовать очень простое переписывание из предыдущей версии nginx в текущую, как показано ниже:

location / {
   if ( !-f $request_filename ) {
     rewrite ^/([a-z]*)$ /index.php?action=$1;
     rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2;
   }
}

Вот как далеко я продвинулся. Страница индекса появляется, но любая страница, которая должна быть переписана, как указано выше, вместо этого выдает 404:

server {

    listen 80 default;
    root /var/www;
    index index.php;
    server_name _;

    location / {
        try_files $uri $uri/ /index.php?action=$uri&item=$args;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Что я здесь не так делаю?


Что именно происходит? Частично проблема в том, что $ uri и $ args неправильно закодированы.
Люк

404 выбрасывается, File not found. если я использую либо URI, /pageлибо/page/id
Industrial

Что происходит, когда вы просто делаете try_files $uri $uri/ /index.php?
Люк

Index.php работает хорошо, но все, что должно быть переписано, заканчивается в 404-х годах
Industrial

Попробуй try_files $uri $uri/ /index.php?$args. Вы должны быть в состоянии получить URL с $_SERVER['REQUEST_URI']. $ _GET должен работать нормально.
Люк

Ответы:


9

Это должно работать:

location / { 
    try_files $uri $uri/ @rules; 
} 

location @rules { 
    rewrite ^/([a-z]*)$ /index.php?action=$1; 
    rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2; 
}

location /index.php { 
    fastcgi_pass 127.0.0.1:9000; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
}

Хм. В вашем первом примере будет загружен index.php, но любые статические файлы или запросы URI, такие как, /page1/itemбудут возвращать index.php
Industrial

Это странно. try_files должен позаботиться об этом.
Люк

Пробовал и второй пример. Та же самая проблема там
Промышленный

Я предполагаю, try_files $uri $uri/работает со статическими файлами?
Люк

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.