帮助 nginx 重写

帮助 nginx 重写

在 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 扩展名之前的文字 .。

相关内容