Назад | Перейти на главную страницу

Проблема Nginx HHVM Wordpress с выполнением PHP в одном промежуточном подкаталоге

У меня странная ситуация с одним из моих веб-сайтов, который все еще находится в разработке в AWS. У меня nginx 1.9.9 с HHVM 3.6.6-1.amzn1.x86_64 на t2.micro. Это не публично доступно.

У меня есть собственный письменный веб-сайт в корне домена, у меня Wordpress находится в каталоге / blog, а администратор wordpress находится в / blog / wp-admin. На настраиваемом сайте есть различные файлы, включая index.php. Wordpress имеет index.php и множество других вещей в каталоге блога, wp-admin также использует index.php.

Я могу загрузить кастомный сайт, он полностью работает. Админ Wordpresss полностью работает. Домашний экран / список историй блога Wordpress полностью работает. Эта проблема Когда я нажимаю на любую ссылку на статью в блоге, чтобы просмотреть ее полностью, отображается индекс домашней страницы настраиваемого веб-сайта. Итак, чтобы сказать это по-другому

http://www.example.com/index.php  - custom website works
http://www.example.com/blog/index.php  - blog index works
http://www.example.com/blog/2015/storyname - story load doesn't work with permalink %postname% regardless of text in post name - http://www.example.com/index.php loads
http://www.example.com/blog/2015/?p=96 - story load works
http://www.example.com/blog/wp-admin/ - admin works

Когда я нажимаю ссылку истории, я получаю такое же содержимое страницы, как если бы я нажал http://www.example.com/index.php за исключением того, что изображения не загружаются, поскольку они сделаны с относительными URL-адресами

http://www.example.com/blog/2015/storyname

Когда я загружаю корень сайта /index.php, я получаю следующие заголовки отладки (см. Мою конфигурацию ниже, чтобы узнать, как они создаются)

Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php

Когда я загружаю / wp-admin / я получаю эти заголовки обратно

Z_LOCATION: PHP MAIN
URI: /blog/wp-admin/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/wp-admin/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/wp-admin/index.php

Когда я загружаю домашний блог /blog/index.php, я получаю эти заголовки обратно

Z_LOCATION: PHP MAIN
URI: /blog/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/index.php

Когда я пытаюсь загрузить этот URL http://www.example.com/blog/2015/storyname Я получаю следующие заголовки обратно. Z_REQUEST_FILENAME (выше) показывает, что загружается неправильный URL.

Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php

Я понятия не имею, почему он пытается загрузить корневой каталог сайта index.php, когда я нажимаю на этот URL. Подсказки:

Почему это может быть проблемой только для просмотра статей в блогах ???? Интересно, связано ли это с try_files?

В журнале ошибок hhvm ничего нет, в журнале ошибок nginx ничего нет. Журнал доступа показывает следующее, когда я запрашиваю последний URL

(IP removed) - - [10/Jan/2016:08:22:19 +0000] "GET /blog/2015/storyname HTTP/1.1" 200 4424 "http://www.example.com/blog/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0" "-" "0.050"

Вот конфигурация моего сайта nginx. Я не включил основной nginx.conf, так как не считаю его актуальным. NB Я обновил эту работу рабочий код.

server {
  server_name www.example.com;
  root /var/www/hr;
  access_log      /var/log/nginx/hr.access.log main;

  # Default location to serve
  location / {
    try_files $uri $uri/ /blog/index.php?$args;
    add_header Z_LOCATION "hr_root"; add_header URI $uri; # DEBUG
  }

  location ~*      \.(jpg|jpeg|png|gif|css|js)$ {
    log_not_found off; access_log off;
    add_header Z_LOCATION "STATIC RESOURCES REGEX"; add_header URI $uri;      # DEBUG
  }

  # Send HipHop and PHP requests to HHVM
  location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_intercept_errors on;
    fastcgi_pass       php;
    include                        fastcgi_params;
    fastcgi_param      SCRIPT_FILENAME $document_root$fastcgi_script_name;

    # DEBUGGING
    add_header Z_LOCATION "PHP MAIN"; add_header URI $uri;
    add_header Z_DOCUMENT_ROOT "$document_root"; add_header Z_FASTCGI_SCRIPT_NAME "$fastcgi_script_name";
    add_header Z_REQUEST_FILENAME "$request_filename";
  }
}

# Forward non-www requests to www
server {
  listen 0;
  server_name example.com;
  return 302 http://www.example.com$request_uri;
}

Любые мысли, идеи или помощь приветствуются. Для меня это довольно вьющийся вопрос, но я подозреваю, что исправить это будет несложно.

Доставка контента WordPress осуществляется /blog/index.php сценарий. Предположительно, это вызывается, когда вы отправляете URI /blog/ из-за $uri/ пункт в try_files. Но у вас нет правил для вызова /blog/index.php для любого другого URI, начинающегося с /blog/....

Один из вариантов - сделать WorkPress по умолчанию:

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

В качестве альтернативы добавьте еще один блок местоположения для обработки только URI, начинающихся с /blog/...:

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