我想知道是否有可能匹配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) { ...
由于nginxselectlocation指令的方式,您的尝试不起作用。 使用~块优先于使用^~的块,因此为wp-login.phpselect了.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服务。