Я новичок в Nginx и пытаюсь перевести следующее правило, которое у меня есть для сайта WordPress, с Apache на Nginx. Я начинаю с конфигурации Nginx по умолчанию на компьютере с Ubuntu под управлением Nginx 1.4.6.
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.php
за исключением файлов, определенных в RewriteCond
править.
Из того, что я понял, способ сделать это в 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;
}
Каков был бы лучший способ достичь этого?
Ваша первая попытка неверного синтаксиса для местоположения регулярного выражения. Вероятно, это должно выглядеть так:
location ~ ^/wp-content/plugins/.*\.php$ { ... }
Скорее чем try_files
директива, вы должны использовать rewrite
, как это:
rewrite ^ /security-log.php last;
Конечно, ни один из подходов не соответствует функции .htaccess
файл.
Вы уже заметили, что блок местоположения, который обрабатывает файл PHP, должен содержать fastcgi
директивы. Это может быть достигнуто путем помещения их в отдельный файл и использования 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;
}
Увидеть этот документ для синтаксиса местоположения.
Я могу порекомендовать вам прочитать эту подводную документацию как новый пользователь nginx https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
и для настройки WordPress:
https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/