1

私はNginxが初めてで、WordPressサイト用に持っている次のルールをApacheからNginxに変換しようとしています. Nginx 1.4.6 を実行している Ubuntu マシンで、デフォルトの Nginx 構成から始めています。

RewriteCond %{REQUEST_URI} !^/wp-content/themes/path/to/exclude/file\.php
RewriteRule wp-content/themes/(.*\.php)$ log.php?f=$1 [L]

上記のルールは、ルールで定義されたファイルを除いて、すべてのリクエストをwp-content/themes/*.phpに書き換えます。security-log.phpRewriteCond

私が集めたものから、Nginx でこれを行う方法は、locationブロックを使用することです。次のことを試しました(特定のファイル/フォルダーを除外するために何をすべきかまだわかりません)。

location = /wp-content/plugins/(.*\.php)$ {
    try_files /security-log.php =404;
}

上記のルールは完全に無視されているようです (正規表現に何か問題があるのでしょうか?)。

次のように固定パスを指定すると、ルールが呼び出されますが、Nginx は PHP インタープリターを使用して実行するのではなく、PHP ファイルを提供します (ブラウザーはファイルをダウンロードします) (ほとんどの場合、これはfast-cgi呼び出されていないためです)。

location = /wp-content/plugins/test.php {
    try_files /security-log.php =404;
}

これを達成するための最良の方法は何ですか?

4

2 に答える 2

1

最初の試みは、正規表現の場所の構文が無効です。おそらく次のようになります。

location ~ ^/wp-content/plugins/.*\.php$ { ... }

try_filesディレクティブではなく、次のrewriteように使用する必要があります。

rewrite ^ /security-log.php last;

もちろん、どちらのアプローチも.htaccessファイルの機能に一致しません。

fastcgiPHP ファイルを処理するロケーション ブロックにディレクティブが含まれている必要があることは既に説明しました。これは、それらを別のファイルに配置し、ディレクティブを使用してそれらを複数のブロックincludeにプルすることで実現できます。location

これは、既存のブロック.htaccessの前に正規表現の場所を配置することでファイルを実装できることを意味します。location ~ \.php$例えば:

location = /wp-content/themes/path/to/exclude/file.php {
    include common-php-directives;
}
location ~ ^/wp-content/themes/.*\.php$ {
    rewrite ^/wp-content/themes/(.*\.php)$ /log.php?f=$1 last;
}
location ~ \.php$ {
    include common-php-directives;
}

場所の構文については、このドキュメントを参照してください。

于 2016-03-31T18:07:52.610 に答える