Конфигурация Nginx не работает с Wordpress в подкаталоге

У меня есть nginx установка, в которой я нуждаюсь для хостинга веб-сайтов в разработке так, чтобы другие люди могли проверить их.

Прямо сейчас я настроил виртуальный хост к единственному субдомену и в той символьной ссылке каталога I проекты, которые должны быть открыты для тестирования. Как Вы видите, имеют меня ограниченный доступ к целому сайту, но включил для определенного каталога, но хранения его частный с простым auth_basic.

PHP работает, но я продолжаю получать 404 с для чего-либо кроме / или/wp-admin/, все другие постоянные ссылки дает 404 с. Я сделал примерно все, чтобы заставить это работать, но я понятия не имею, что я делаю неправильно. Укажите на мою ошибку в следующей конфигурации:

server {
  listen 80;
  server_name dev.example.com;
  client_max_body_size 20m;
  server_tokens off;

  root /srv/dev.example.com;
  index index.php index.html index.htm;

  location / {
    deny all;
  }

  location /my-site {
    allow all;

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

    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/auth.d/.htpasswd-my-site;

    location ~ \.php$ {
      include fastcgi_params;
      fastcgi_index index.php;
      fastcgi_pass php5-fpm-sock;
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_intercept_errors on;
      fastcgi_param HTTPS $https;
    }
  }
}

Спасибо!

ОБНОВЛЕНИЕ:

Этот запрос работал бы: http://dev.example.com/my-site/, это привело бы к загрузке файла /srv/dev.example.com/my-site/index.php.

Запрос к администраторскому интерфейсу Wordpress работал бы также: http://dev.example.com/my-site/wp/wp-admin, также идя непосредственно в индексный файл: /srv/dev.example.com/my-site/wp/wp-admin/index.php. Все в администраторе соединяет интерфейсом с работами, так как это не использует постоянные ссылки, но сырые данные вводятся.

Однако, как только я пытаюсь загрузить постоянную ссылку (я использую самый простой формат /%postname%/) это перестало работать в нахождении его и try_files директиве в location /my-site {} должен соответствовать им. Это означает, что маршруты, такие как следующее не работают:

http://dev.example.com/my-site/about
http://dev.example.com/my-site/contact
http://dev.example.com/my-site/etc
0
задан 4 November 2014 в 23:41
1 ответ

Я предполагаю, что следующие файлы не существуют в вашей файловой системе:

/srv/dev.example.com/my-site/about/index.{php,html,htm}
/srv/dev.example.com/my-site/contact/index.{php,html,htm}
/srv/dev.example.com/my-site/etc/index.{php,html,htm}

Ваша проблема возникает из-за того, что ваше резервное местоположение php вложено в / my-site location и директива try_files может работать не так, как вы ожидаете.

Действительно, try_files принимает в качестве последнего параметра либо:

  1. URI
  2. a Именованное местоположение
  3. код HTTP

Для вариантов 1 и 2 это будет означать внутреннее перенаправление на указанный элемент. В вашем случае /index.php?$args интерпретируется как URI, и nginx выполнит внутреннее перенаправление на него, если $ uri , $ uri / , ] $ uri / index.php , $ uri / index.html , $ uri / index.htm отсутствуют.

Другой момент: вы используете вложенное расположение для обработки файлов php. Но поскольку ваш последний параметр try_files - это URI /index.php?$args , он не будет соответствовать местоположению вершины / my-site , поэтому он обрабатывается серверный блок, и если URI не может быть преобразован в локальный файл, вы получите ответ HTTP 404.

Обратите внимание, что директива index также будет подразумевать внутренние перенаправления на указанные файлы индекса , но так как URI начинаются с / my-site , он всегда будет находиться в вашем местоположении php.

Таким образом, вы должны либо переместить это местоположение на тот же уровень, что и другие, либо префикс своего try_files URI с префиксом местоположения вершины и убедитесь, что файл php находится в нужном месте.

3
ответ дан 4 December 2019 в 12:30

Теги

Похожие вопросы