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

Псевдоним папки wordpress с другого веб-сайта

У меня небольшая дилемма. Я написал собственный фреймворк PHP MVC и построил на нем CMS. Я решил испытать и nginx + fpm. Это корень моей дилеммы. Меня попросили включить блог на wordpress на мой веб-сайт (да). В нем много контента, и это неосуществимо за то короткое время, когда мне нужно перенести весь контент в мою CMS. По общему признанию, из-за того, что много лет использую Apache, я немного заблудился в использовании nginx.

На моем веб-сайте указан путь к файлу:

/opt/directories/mysite/public/

Файлы wordpress расположены по адресу:

/opt/directories/mysite/news/

Я знаю, что мне просто нужно настроить местоположение (а), которое нацелено на / news [/ *], а затем принудительно помещать все соответствующие URI в index.php внутри. Может ли кто-нибудь указать мне в правильном направлении?

Моя конфигурация ниже:

server {

        listen   80;
        server_name staging.mysite.com

        index   index.php;

        root /opt/directories/mysite/public;

        access_log  /var/log/nginx/mysite/access.log;
        error_log   /var/log/nginx/mysite/error.log;

        add_header  X-NodeName  directory01;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

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

        location ~ /news {
                try_files $uri $uri/ @news;
        }

        location @news {
                fastcgi_pass unix:/tmp/php-fpm.sock;
                fastcgi_split_path_info ^(/news)(/.*)$;
                fastcgi_param SCRIPT_FILENAME /opt/directories/mysite/news/index.php;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        include fastcgi_params;
        include php.conf;

        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
                access_log        off;
                expires           30d;
        }

        ## Disable viewing .htaccess & .htpassword
        location ~ /\.ht {
                deny  all;
        }
}

Мой файл php.conf:

location ~ \.php {
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

        fastcgi_pass unix:/tmp/php-fpm.sock;

    # If you must use PATH_INFO and PATH_TRANSLATED then add 
    # the following within your location block above 
    # (make sure $ does not exist after \.php or /index.php/some/path/ will not match):

    #fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #fastcgi_param  PATH_INFO          $fastcgi_path_info;
    #fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
}

файл fastcgi_params:

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

Во многом спасибо @Kromey, я изменил свое местоположение / новости /, но все еще не получаю желаемого результата.

Я смог научиться привязать местоположение ~ my / news, когда обнаружил, что сначала выполняется сопоставление моего местоположения php.

При такой настройке я получаю статус 200, но страница пуста. Любые идеи?

На самом деле это довольно просто и чертовски компактнее, чем аналогичная установка для Wordpress на Apache (я веду 2 блога Wordpress, оба ранее на Apache, и оба недавно перешли на nginx + PHP (не FPM, хотя у меня это работало для время, прежде чем решить, что это было излишним для моих сайтов с низким трафиком)).

location /news/ {
    #Need a new root to point to your "aliased" directory
    root /opt/directories/news
    # This is cool because no php is touched for static content
    try_files $uri $uri/ /index.php;
}

Как следует из комментария, любой статический контент (изображения, CSS, JavaScript, robots.txt и т. Д.), Который находится внутри вашего пути Wordpress, обслуживается напрямую, без участия PHP; все иначе перенаправляется на index.php.

Обратите внимание, что try_files директива является полуновой (кажется, 0.8?), поэтому вам, возможно, придется обновить свой nginx; когда я устанавливал из репозиториев Ubuntu apt, это была слишком старая версия для этого, и конфигурация была настолько сложной, что я apt-get removed и установил nginx из исходников (довольно простая операция).