Nginx RegEx 匹配目录和文件

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) {
...

答案1

你的尝试没有成功,因为 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;
    ...
}

答案2

在阅读您对 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。

相关内容