Nginx Reescreve o núcleo da regra PHP + Wordpress | Não é possível fazer login no painel do WP-Admin

1

Eu tenho um site estático desenvolvido no núcleo do PHP (No framework usado) e também instalei um blog usando o wordpress em um subdiretório sob o mesmo domínio.

Like : example.com/blog

Como o site principal é construído usando arquivos php estáticos, conforme recomendação de SEO, escrevi uma regra de reescrita simples para remover a extensão .php dos URLs.

Então

http://example.com/abc.php will rewrite to http://example.com/abc

Agora chegando ao problema real.

Quando tento acessar o link e coloco o nome de usuário e a senha, ele redireciona o wp-login.php, mas devido ao acima regra de reescrita ela muda para wp-login e faz com que a página 404 de redirecionamento não seja encontrada no site principal.

Regra de reescrita Nginx vhostconf é:

location ~ \.php$ {
    if ($request_uri ~ (.*)\.php$) {
        return 301 $1;
    }

    try_files $uri =404;

    expires off;

    fastcgi_read_timeout 900s;
    fastcgi_index index.php;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9001;

Eu sei que pode não ser a melhor maneira de fazer isso mas eu tentei quase todas as respostas no stackexchange por horas e finalmente consegui este trabalho usando acima.

Minha pergunta é como posso excluir o wp-admin de tal redirecionamento? ou então alguém pode sugerir qualquer regra alternativa de redirecionamento / reescrita para evitar tal colisão?

Configuração completa do Nginx:

server {
    listen 80; # Default listen port
    if ($host = www.example.com) {
        rewrite ^/(.*)$ http://example.com/$1 permanent;
    }
    server_name example.com www.example.com;
    root  /home/example.com/public_html/;
    index index.php index.html;
    access_log /var/log/nginx/skpat77-access.log;
    error_log /var/log/nginx/skpat77-error.log;
    gzip on; # Turn on gZip
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length  1400;
    gzip_vary  on;
    gzip_types  text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    try_files $uri $uri/ /index.php?$args;


    #error 500 502 503
    error_page 500 502 503 /500x.html;
    location = /500x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        if ($request_uri ~ (.*)\.php$) {
            return 301 $1;
        }

        try_files $uri =404;

        expires off;

        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location /blog/ {
        index index.php index.html index.htm;
        try_files $uri $uri/ /blog/index.php;
    }
}

Obrigado!

    
por Sachin Singh 04.08.2016 / 12:22

2 respostas

1

Experimente esta configuração:

server {
    # Handle redirects to www.example.com
    server_name example.com;
    return 301 http://www.example.com$uri;
}

server {
    listen 80; # Default listen port
    server_name www.example.com;
    root  /home/example.com/public_html/;
    index index.php index.html;
    access_log /var/log/nginx/skpat77-access.log;
    error_log /var/log/nginx/skpat77-error.log;
    gzip on; # Turn on gZip
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length  1400;
    gzip_vary  on;
    gzip_types  text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    # Add .php extension to list of files to go through before trying WP
    try_files $uri $uri.php $uri/ /index.php?$args;


    #error 500 502 503
    error_page 500 502 503 /500x.html;
    location = /500x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        if ($request_uri ~ (.*)\.php$) {
            return 301 $1;
        }

        try_files $uri =404;

        expires off;

        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location /blog/ {
        index index.php index.html index.htm;
        try_files $uri $uri.php $uri/ /blog/index.php;
    }
}

No entanto, o problema com essa abordagem é que pode haver outros efeitos colaterais. Eu recomendo que você use os arquivos .php brutos com a extensão, ou implemente um sistema similar de URL amigável como no Wordpress em seus próprios arquivos PHP.

Ou melhor ainda, implemente seus próprios arquivos PHP no WP.

    
por 05.08.2016 / 11:07
0

Estou analisando essa questão sozinho - enquanto isso, descobri que posso fazer o login usando /blog/index.php/wp-admin/ em vez de / blog / wp-admin /

Isto não pretende ser uma solução, e sim um paliativo durante o processo de reconfiguração

    
por 24.01.2017 / 10:40