Использование fastcgi_split_path_info для userdir в nginx

Я пытаюсь выполнить файл PHP на моем сервере по URL /~nik/t.php (фактический файл в /home/nik/public_html/t.php). Вот как выглядят мои настройки PHP:

location ~ ^/~(.+?)(/.*)\.php$ {
    alias /home/$1/public_html;

    # What should this regex be?
    fastcgi_split_path_info ^/~nik/(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) {                 
        return 404;
    }

    include fastcgi.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;                           
 }

Я продолжаю получать 404, и когда я закомментирую пункт вокруг return 404;Я могу увидеть ошибку:

Unable to open primary script: /home/nik/public_html/~nik/t.php (No such file or directory)

Можете ли вы увидеть, что не так с моей конфигурацией, или указать мне несколько документов о том, как это сделать? К сожалению, для настройки nginx требуется расширенное знание регулярных выражений.

1 ответ

Решение

На самом деле это очень простая ошибка регулярного выражения, которую вы там совершили.

Как ваша вторая группа захвата в fastcgi_split_path_info директива (/.*) тогда все регулярное выражение ^/~nik/(.+?\.php)(/.*)$ не будет соответствовать /~nik/t.php поскольку это не сопровождается косой чертой. Знак вопроса здесь также бесполезен, хотя это не является причиной поведения, которое вы видите.

Правильное регулярное выражение должно быть ^/~nik/(.+\.php)(.*)$

Другие вопросы по тегам