Alterar permalinks me dá erros 404 no nginx

14

EDITAR

Acontece que eu estava latindo na árvore errada tentando editar o .htaccess, já que o nginx não o usa. O que eu aparentemente preciso fazer é editar meu arquivo .conf. Antes de ler isto, o my_app.conf ficou assim:

upstream backend {
    server unix:/u/apps/my_app/tmp/php.sock;
}

server {

    listen 80 default;
    root /u/apps/my_app/www;
    index index.php;

    access_log /u/apps/my_app/logs/access.log;
    error_log /u/apps/my_app/logs/error.log;

    location / {
        try_files $uri $uri/ /index.php;
    }

    # This location block matches anything ending in .php and sends it to
    # our PHP-FPM socket, defined in the upstream block above.
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass backend;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name;
        include fastcgi_params;
    }

    # This location block is used to view PHP-FPM stats
    location ~ ^/(php_status|php_ping)$ {
        fastcgi_pass backend;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
        allow 127.0.0.1;
        deny all;
    }

    # This location block is used to view nginx stats
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

Agora parece com isso e ainda não está funcionando:

upstream backend {
    server unix:/u/apps/my_app/tmp/php.sock;
}

server {

    listen 80 default;
    root /u/apps/my_app/www;
    index index.php;

    access_log /u/apps/my_app/logs/access.log;
    error_log /u/apps/my_app/logs/error.log;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location /wordpress/ {
        try_files $uri $uri/ /index.php?$args;
    }

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2    |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
       access_log off; log_not_found off; expires max;
    }

    # Uncomment one of the lines below for the appropriate caching plugin (if used).
    #include global/wordpress-wp-super-cache.conf;
    #include global/wordpress-w3-total-cache.conf;

    # This location block matches anything ending in .php and sends it to
    # our PHP-FPM socket, defined in the upstream block above.
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass backend;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name;
        include fastcgi_params;
    }

    # This location block is used to view PHP-FPM stats
    location ~ ^/(php_status|php_ping)$ {
        fastcgi_pass backend;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
        allow 127.0.0.1;
        deny all;
    }

    # This location block is used to view nginx stats
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

Alguém sabe o que estou fazendo errado?

END EDIT

Eu mudei meus permalinks do padrão para /% postname% /, e agora os links dentro do painel de administração do WordPress me deram erros 404 - Não páginas WordPress 404, nginx 404 páginas. Pesquisando por que isso é dito que isso deveria estar editando meu arquivo .htaccess ou me dizendo que o WordPress não pode reescrever .htaccess - o arquivo .htaccess é inexistente, e o WordPress não está dando erros quando eu altero permalinks.

Eu tentei criar um arquivo .htaccess em branco na minha pasta do wordpress, dando a ele 666 permissões, alterando o usuário e o grupo para www-data e depois alterando os permalinks - isso não funcionou. Eu mudei para isso antes de mudar os permalinks:

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

Quando isso não funcionou, eu mudei RewriteBase para /wordpress/ antes de mudar os permalinks novamente - ainda nada.

Eu também entrei no arquivo .conf do meu site e alterei try_files $uri $uri/ /index.php; para o seguinte, reiniciando o nginx e php5-fpm a cada vez;

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

try_files $uri $uri/ /index.php?q=$request_uri;

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

Estou executando um servidor doméstico com nginx. Alguma idéia sobre o que está acontecendo aqui?

    
por ninjachicken1 21.05.2015 / 18:30

4 respostas

11

Essas são as regras de reconfiguração do Apache .htaccess , mas você declarou que está em um servidor Nginx. O Nginx não usa um arquivo em nível de diretório .htaccess , muito menos usa o próprio arquivo .htaccess . Você precisa editar a própria configuração do servidor. O Codex tem um exemplo detalhado :

# WordPress single blog rules.
# Designed to be included in any server {} block.

# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
    try_files $uri $uri/ /index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
       access_log off; log_not_found off; expires max;
}

# Uncomment one of the lines below for the appropriate caching plugin (if used).
#include global/wordpress-wp-super-cache.conf;
#include global/wordpress-w3-total-cache.conf;

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)

    include fastcgi.conf;
    fastcgi_index index.php;
#   fastcgi_intercept_errors on;
    fastcgi_pass php;
}
    
por s_ha_dum 21.05.2015 / 18:48
15

Estou usando o multisite do wordpress com configuração personalizada de permalink: /% category% /% postname% /

/etc/nginx/site-available/domain.conf

No servidor {

location / {
    try_files $uri $uri/ /index.php?q=$uri$args;
}

Se o seu wordpress root não for o webroot, mas enlace :

location /wordpress/ {
    try_files $uri $uri/ /wordpress/index.php?q=$uri$args;
}

Se você estiver usando o antigo wordpress com blogs.dir, adicione:     localização ^ ~ /blogs.dir {         interno;         alias /var/www/wordpress/wp-content/blogs.dir;         access_log off; log_not_found off; expira max;     }

Verifique a configuração do nginx: sudo nginx -t

Recarregue o nginx: sudo service nginx reload

Tente também alterar as configurações de permalink.

    
por Domi 30.11.2016 / 19:08
5

Teve que adicionar este trecho de código aos dois /sites-available/your-settings-file e /sites-enabled/your-settings-file :

server {
[...]

if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

[...]
}

Está funcionando para mim agora.

    
por Angelo Reale 06.04.2017 / 07:38
0

Eu tive que definir o caminho da raiz para o diretório instalado do wordpressś: root / var / www / html / wp;

Eu não gosto porque eu tenho mais aplicativos instalados nesta máquina, mas a criação de mais hosts virtuais deve ser suficiente.

    
por Mendas 07.08.2018 / 16:07