パーマリンクを変更すると、nginxで404エラーが発生します


18

編集

nginxはそれを使用しないため、.htaccessを編集しようとして間違ったツリーを探していたことがわかりました。明らかに必要なことは、.confファイルを編集することです。これを読む前に、my_app.confは次のようになりました。

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

これは次のようになりますが、まだ機能していません。

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

誰が私が間違っているのか知っていますか?

編集を終了

パーマリンクをデフォルトから/%postname%/に変更しました。WordPressの管理パネル内のリンクから、WordPress 404ページではなく、nginx 404ページである404エラーが表示されます。これが私の.htaccessファイルを編集する必要がある、またはWordPressが.htaccessを書き換えることができないことを教えてくれる理由を調べる-.htaccessファイルは存在せず、パーマリンクを変更してもWordPressはエラーを出さない

私は、wordpressフォルダーに空の.htaccessファイルを作成して、666のアクセス許可を与え、ユーザーとグループをwww-dataに変更し、パーマリンクを変更しようとしましたが、うまくいきませんでした。次に、パーマリンクを変更する前にこれに変更しました。

# 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

それがうまくいかなかったとき、パーマリンクを再び変更RewriteBaseする/wordpress/前に変更しました-それでも何もありません。

また、サイトの.confファイルにアクセスtry_files $uri $uri/ /index.php;して次のように変更し、毎回nginxとphp5-fpmを再起動しました。

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

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

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

私はnginxでホームサーバーを実行しています。ここで何が起こっているのかについてのアイデアはありますか?

回答:


13

これらはApacheの.htaccess書き換えルールですが、あなたはNginxサーバー上にいると述べています。Nginxは.htaccess-likeディレクトリレベルのファイルを使用せず、.htaccessファイル自体を使用することはほとんどありません。サーバー構成自体を編集する必要があります。Codexには詳細サンプルがあります

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

おかげで、私は評判があればこれを投票します。デフォルトから大幅に変更されたため、これを.confファイルに実装するのに少し苦労していますが、少なくとも.htaccessをいじる必要はありません。
ninjachicken1

@s_ha_dum、私は昨日までwordpress 4.8にアップデートしたときにこれらの設定を使用しましたが、パーマリンクのカスタム構造で404を取得しています...昨日からデバッグを試みましたが、何も心配していませんか?
ジェイディ

「fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;」を読むために、最後の行を変更する必要がありました。Ubuntu 18.04で動作しますが、正常に動作し、正気を
ロブ

18

カスタムパーマリンク設定でwordpressマルチサイトを使用しています:/%category%/%postname%/

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

サーバー上{

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

ルートワードプレスがwebrootではなくhttp://domain.com/wordpress/の場合

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

blogs.dirで古いワードプレスを使用している場合は、次を追加します:location ^〜/blogs.dir {internal; エイリアス/var/www/wordpress/wp-content/blogs.dir; access_log off; log_not_found off; 最大有効期限。}

nginxの構成を確認します。sudonginx -t

nginxのリロード:sudo service nginx reload

また、パーマリンクの設定を変更してみてください。


4
これは、WordPressインストールを新しいドメイン名の下のサブディレクトリに手動で移動したい人にとって最良の回答です!どうもありがとうございます!これは受け入れられた答えでなければなりません。
-specialk1st

1
パス:/ etc / nginx / site-available /は次のようになります。/ etc / nginx / sites-available /
付与

6

このコードを/sites-available/your-settings-fileandの両方に追加する必要がありました/sites-enabled/your-settings-file

server {
[...]

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

[...]
}

今私のために働いています。


1
これは私が探していた簡単な答えです、ありがとう
-ThEBiShOp

1
これはうまくいきました!それが何をするのか説明していただけますか?(特に「最後の」部分...)
シッド

1

ルートパスをwordpressśがインストールされているディレクトリに設定する必要がありました。root/ var / www / html / wp;

このマシンにはより多くのアプリケーションがインストールされていますが、仮想ホストを作成するだけで十分なので、私はそれが好きではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.