reescrever ou ciclo de redirecionamento interno ao redirecionar internamente o erro no Nginx

1

Acabei de migrar do Apache para o Nginx e tentando configurar as regras de reescrita. Eu tenho um host virtual e esta é a estrutura do host virtual

/var/www/name-of-virtual-host/
├── wp1
│   ├── wp-admin
│   ├── wp-content
│   └── wp-includes
└── wp2
    ├── wp-admin
    ├── wp-content
    └── wp-includes

Como você vê, eu tenho 2 instalações diferentes do WordPress em pastas diferentes. Então, estou tentando criar uma regra de reescrita para trabalhar com esses 2 WPs.

Esta é a minha definição de localização:

        location / {
                try_files @missing $uri;
        }
        location @missing {
                rewrite ^/([a-z-])(/.*)$ /$1/index.php last;
        }
        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

Se o URI é / wp1 / permalink-of-post / ele deve usar /wp1/index.php e se / wp2 / permalink-of- post / deve usar /wp2/index.php .

Mas estou recebendo um reescrito ou um ciclo de redirecionamento interno ao redirecionar internamente para o erro .

Como posso escrever minhas regras de reescrita para usar com várias instalações WP?

UPDATE 1

Um exemplo de arquivo .htaccess do WordPress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp1/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp1/index.php [L]
</IfModule>

# END WordPress
    
por Eray 12.09.2015 / 19:47

2 respostas

4

O seu try_files não está na ordem errada? Talvez seja isso que causa a dor de cabeça e os ciclos intermináveis, porque o arquivo @missing , bem, está realmente ausente do seu sistema de arquivos, e redirecionar de volta para $uri certamente deve causar um ciclo interminável com certeza?

-try_files @missing $uri;
+try_files $uri @missing;

No entanto, se você tiver apenas dois sites WordPress, acho que uma abordagem melhor seria simplesmente ter um pouco de copiar e colar, em vez de tentar invocar expressões regulares e todas as vezes.

Por exemplo, provavelmente seria melhor ter o seguinte do que tentar reescrever vários redirecionamentos:

location /wp1 {
    try_files $uri /wp1/index.php;
}
location /wp2 {
    try_files $uri /wp2/index.php;
}
    
por 15.09.2015 / 10:04
1

Isso me chama a atenção:

rewrite ^/([a-z-])(/.*)$ /$1/index.php last;

$1 , neste caso, corresponde apenas a um caractere.

Eu não vou mais longe para consertar isso. Em vez de reinventar a roda, você deve começar a partir de uma configuração recomendada. Há muitas armadilhas e lições demais para aprender o contrário. link

    
por 19.09.2015 / 21:10

Tags