在 apache 设置中,我屏蔽了 url 后面的 wordpress /admin
。
我通过以下规则实现了这一点:
RewriteRule admin/(.*).php wordpress/wp-admin/$1.php [L]
RewriteRule /admin$ admin/ [L,R=301]
RewriteRule ^admin/$ wordpress/wp-admin/index.php [L]
因此,对于 nginx 来说,最后一条规则非常简单:
rewrite ^/admin/$ /wordpress/wp-admin/index.php last;
或多或少逐字重复。
第二条规则似乎没有必要……它只是为了在末尾强制加一个斜线。
第一条规则似乎没有起作用。我让 nginx 输出重写的调试信息,但它似乎没有为以下 URL 写入任何内容/admin/edit.php
这是我的整个 nginx 配置,如果那里有一些信息的话:
worker_processes 1;
events {
worker_connections 1024;
}
error_log /var/log/file.log notice;
http {
rewrite_log on;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /home/meul/site/htdocs/web;
index index.php index.html index.htm;
if (-f $request_filename) {
expires max;
break;
}
rewrite ^/admin/(.*).php$ /wordpress/wp-admin/$1.php break;
rewrite ^/admin/$ /wordpress/wp-admin/index.php last;
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/meul/site/htdocs/web$fastcgi_script_name;
include fastcgi_params;
}
}
答案1
改变
rewrite ^/admin/(.*).php$ /wordpress/wp-admin/$1.php break;
到
rewrite ^/admin/(.*)\.php$ /wordpress/wp-admin/$1.php last;
break
在当前位置块之后停止处理,但在这种情况下,您仍然需要该 location ~ \.php$
块来为管理 php 提供服务。此外,由于这是一个正则表达式,因此您需要转义 php 扩展名之前的文字 .。