Kalıcı bağlantıların değiştirilmesi bana nginx'te 404 hataları veriyor


18

DÜZENLE

Nginx bunu kullanmadığı için .htaccess'i düzenlemeye çalışırken yanlış ağacı havlıyor olduğum ortaya çıkıyor. Görünüşe göre yapmam gereken .conf dosyamı düzenlemek. Bunu okumadan önce, my_app.conf şöyle görünüyordu:

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;
    }
}

Şimdi böyle görünüyor ve hala çalışmıyor:

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;
    }
}

Ne yaptığımı bilen var mı?

SON DÜZENLEME

Kalıcı bağlantılarımı varsayılandan /% postname% / olarak değiştirdim ve şimdi WordPress'in Yönetici panelindeki bağlantılar bana 404 hataları veriyor - WordPress 404 sayfaları değil, nginx 404 sayfaları. Bunun neden bunun .htaccess dosyamı düzenlemesi gerektiği veya WordPress'in .htaccess'i yeniden yazamadığını söylemesi gerektiğini söyleyin .htaccess dosyası mevcut değil ve kalıcı bağlantıları değiştirdiğimde WordPress herhangi bir hata vermiyor.

Wordpress klasöründe boş bir .htaccess dosyası oluşturmayı denedim, 666 izin vererek, kullanıcı ve grubu www-veriye değiştirdikten sonra kalıcı bağlantıları değiştirmedim. Sonra kalıcı bağlantıları değiştirmeden önce bunu değiştirdim:

# 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

Bu çalışma yoktu, ben değiştirdi RewriteBaseiçin /wordpress/tekrar Kalıcı değiştirmeden önce - hala hiçbir şey.

Ayrıca sitemin .conf dosyasına gittim try_files $uri $uri/ /index.php;ve her seferinde nginx ve php5-fpm'yi yeniden başlatarak aşağıdakilere geçtim ;

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

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

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

Ben nginx ile bir ev sunucusu çalıştırıyorum. Burada neler olduğu hakkında bir fikrin var mı?

Yanıtlar:


13

Bunlar Apache .htaccessyeniden yazma kurallarıdır, ancak bir Nginx sunucusunda olduğunuzu belirttiniz. Nginx .htaccessbenzeri bir dizin düzeyinde dosya kullanmaz, .htaccessdosyanın kendisini daha az kullanır .. Sunucu yapılandırmasının kendisini düzenlemeniz gerekir. Kodeks'in ayrıntılı bir örneği vardır :

# 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;
}

Teşekkürler, itibara sahip olsaydım oy verirdim. Zaten varsayılandan önemli ölçüde değiştirildi gibi görerek benim .conf dosyaya bu uygulama biraz sorun yaşıyorum, ama en azından .htaccess ile uğraşmak artık değil.
ninjachicken1

@s_ha_dum, wordpress 4.8'e güncellediğim zamana kadar bu yapılandırmayı kullandım ve şimdi kalıcı bağlantılar özel yapısında 404'ler alıyorum .... dünden beri hata ayıklamayı denedim ama hiçbir şey worx, herhangi bir fikir?
Jadeye

"Fastcgi_pass unix: /var/run/php/php7.2-fpm.sock;" okumak için son satırı değiştirmek zorunda kaldım. Ubuntu 18.04 üzerinde çalışmak ama işe yarıyor ve akıl sağlığımı kurtardı
Rob

18

Özel kalıcı bağlantı ayarıyla wordpress çoklu sitesini kullanıyorum: /% category% /% postname% /

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

Sunucuda {

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

Kök wordpressiniz webroot değil http://domain.com/wordpress/ ise :

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

Blogs.dir ile eski wordpress kullanıyorsanız şunu ekleyin: location ^ ~ /blogs.dir {internal; takma ad /var/www/wordpress/wp-content/blogs.dir; access_log kapalı; log_not_found kapalı; maks; }

Nginx yapılandırmasını kontrol edin: sudo nginx -t

Nginx'i yeniden yükle: sudo service nginx reload

Ayrıca kalıcı bağlantı ayarlarını değiştirmeyi deneyin.


4
Bu, bir WordPress kurulumunu yeni bir alan adı altında bir alt dizine manuel olarak taşımak isteyen herkes için en iyi cevaptır! ÇOK TEŞEKKÜR EDERİM! Bu kabul edilen cevap olmalı.
specialk1st

1
Yolu: / etc / nginx / site mevcut / okumalısınız: / etc / nginx / sites-available /
Hibe

6

Hem kod parçasını eklemek zorunda /sites-available/your-settings-fileve /sites-enabled/your-settings-file:

server {
[...]

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

[...]
}

Şimdi benim için çalışıyor.


1
Aradığım basit cevap bu, teşekkürler
ThEBiShOp

1
Bu işe yaradı! Ne yaptığını açıklar mısınız? (esp "son" bölümü ...)
Sidd

1

Wordpressś kurulu dizine kök yolunu ayarlamak zorunda kaldım: root / var / www / html / wp;

Bu makinede daha fazla uygulama yüklü olduğu için hoşlanmıyorum, ancak daha fazla sanal ana bilgisayar oluşturmak yeterli olmalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.