Thay đổi permalinks cho tôi lỗi 404 trên nginx


18

BIÊN TẬP

Hóa ra là tôi đã sủa sai cây khi cố chỉnh sửa .htaccess, vì nginx không sử dụng nó. Những gì tôi rõ ràng cần phải làm là chỉnh sửa tập tin .conf của tôi. Trước khi tôi đọc nó, my_app.conf trông như thế này:

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

Bây giờ nó trông như thế này và nó vẫn không hoạt động:

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

Có ai biết tôi đang làm gì sai không?

EDIT KẾT THÚC

Tôi đã thay đổi permalinks của mình từ mặc định thành /% postname% /, và bây giờ các liên kết trong bảng Quản trị của WordPress cung cấp cho tôi lỗi 404 - Không phải trang 404 404, trang nginx 404. Tìm kiếm lý do tại sao điều này được nói với tôi rằng điều này nên chỉnh sửa tệp .htaccess của tôi hoặc cho tôi biết WordPress không thể viết lại .htaccess - tệp .htaccess không tồn tại và WordPress không đưa ra bất kỳ lỗi nào khi tôi thay đổi permalinks.

Tôi đã thử tạo một tệp .htaccess trống trong thư mục wordpress của mình, cấp cho nó 666 quyền, thay đổi người dùng và nhóm thành dữ liệu www và sau đó thay đổi permalinks - không hoạt động. Sau đó tôi đã thay đổi nó thành trước khi thay đổi 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

Khi điều đó không làm việc, tôi đã thay đổi RewriteBaseđến /wordpress/trước khi thay đổi permalinks một lần nữa - vẫn không có gì.

Tôi cũng đã truy cập vào tệp .conf của trang web của mình và thay đổi try_files $uri $uri/ /index.php;thành như sau, khởi động lại nginx và php5-fpm mỗi lần;

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

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

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

Tôi đang chạy một máy chủ gia đình với nginx. Bất cứ ý tưởng về những gì đang xảy ra ở đây?

Câu trả lời:


13

Đó là .htaccesscác quy tắc viết lại của Apache , nhưng bạn đã tuyên bố rằng bạn đang ở trên máy chủ Nginx. Nginx không sử dụng .htaccesstệp cấp thư mục giống như, nó ít sử dụng .htaccesschính tệp đó .. Bạn cần chỉnh sửa cấu hình máy chủ. Codex có một mẫu chi tiết :

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

Cảm ơn, tôi sẽ bỏ phiếu này nếu tôi có tiếng tăm. Tôi gặp một chút rắc rối khi thực hiện điều này vào tệp .conf của mình vì nó đã được thay đổi đáng kể so với mặc định, nhưng ít nhất tôi không phải loay hoay với .htaccess nữa.
ninjachicken1

@s_ha_dum, tôi đã sử dụng cấu hình của nó cho đến ngày hôm qua khi tôi cập nhật lên wordpress 4.8 và bây giờ tôi đang nhận được 404 trên cấu trúc tùy chỉnh permalinks .... đã thử gỡ lỗi nó từ hôm qua nhưng không có gì lo lắng
Jadeye

Tôi đã phải thay đổi dòng cuối cùng khi đọc "fastcgi_pass unix: /var/run/php/php7.2-fpm.sock;" để hoạt động trên Ubuntu 18.04 nhưng nó hoạt động và tiết kiệm sự tỉnh táo của tôi
Rob

18

Tôi đang sử dụng multpressite wordpress với cài đặt permalink tùy chỉnh: /% danh mục% /% postname% /

/etc/nginx/site-av Available / domain.conf

Trên máy chủ {

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

Nếu wordpress gốc của bạn không phải là webroot mà là http://domain.com/wordpress/ :

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

Nếu bạn đang sử dụng wordpress cũ với blog.dir, hãy thêm: location ^ ~ /bloss.dir {Internal; bí danh /var/www/wordpress/wp-content/bloss.dir; access_log tắt; log_not_found tắt; hết hạn tối đa; }

Kiểm tra cấu hình nginx: sudo nginx -t

Tải lại nginx: dịch vụ sudo nginx tải lại

Cũng thử thay đổi cài đặt permalink.


4
Đây là câu trả lời tốt nhất cho bất kỳ ai muốn tự chuyển cài đặt WordPress sang thư mục con dưới một tên miền mới! CẢM ƠN BẠN RẤT NHIỀU! Đây phải là câu trả lời được chấp nhận.
Specialk1

1
Đường dẫn: / etc / nginx / site-Available / nên đọc: / etc / nginx / site-Available /
Cấp

6

Phải thêm đoạn mã này vào cả /sites-available/your-settings-file/sites-enabled/your-settings-file:

server {
[...]

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

[...]
}

Nó làm việc cho tôi bây giờ.


1
Đây là câu trả lời đơn giản mà tôi đang tìm kiếm, cảm ơn
ThEBiShOp

1
Điều này đã làm việc! Bạn có thể vui lòng giải thích những gì nó làm? (đặc biệt là phần "cuối cùng" ...)
Sidd

1

Tôi đã phải thiết lập đường dẫn gốc đến thư mục đã cài đặt wordpressś: root / var / www / html / wp;

Tôi không thích nó vì tôi đã cài đặt thêm ứng dụng trên máy này nhưng tạo thêm máy chủ ảo là đủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.