Назад | Перейти на главную страницу

Nginx RegEx для сопоставления каталога и файла

Мне интересно, можно ли сопоставить каталог Wordpress и конкретный файл в одном месте, поэтому на данный момент у меня есть правило сопоставления только с каталогом wp-admin:

## Restricted Access directory
location ^~ /wp-admin/ {
        auth_basic            "Access Denied!";
        auth_basic_user_file  .users;

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

Я хотел бы также сопоставить wp-login.php файл, но я не могу приступить к работе, я пробовал следующее:

location ^~ /(wp-admin/|wp-login.php) {
...

Ваша попытка не работает из-за того, как nginx выбирает location директива. Блокирует использование ~ имеют приоритет перед теми, кто использует ^~, так что .php блок выбирается для wp-login.php. Вероятно, лучший подход - поймать это внутри .php блок:

location ~ \.php$ {
    location ~ ^/wp-login\.php$ {
        auth_basic            "Access Denied!";
        auth_basic_user_file  .users;
    }
    fastcgi_pass unix:/var/run/php-fpm/www.sock;
    ...
}

Читая ваши комментарии к ответам mgorven, я считаю, что это то, чего вы пытаетесь достичь.

Добавьте этот блок перед блоком соответствия \ .php $.

location ~* ^/wp-admin/$ {
    allow 192.168.0.10;
    deny all;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass your_back_endphp;
}

location ~* ^/wp-login.php$ {
    allow 102.168.0.10;
    deny all;
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass your_back_endphp;
}

С wp-admin у вас не может быть fastcgi_split_path_info, потому что это нарушит стили и обслуживаемые js.