Alias wordpress folder from within another website

Posted by Bretticus on Server Fault See other posts from Server Fault or by Bretticus
Published on 2011-04-08T16:39:59Z Indexed on 2011/06/20 16:26 UTC
Read the original article Hit count: 241

Filed under:
|
|

I have a little dilemma. I wrote a custom PHP MVC framework and built a CMS on top of it. I decided to give nginx+fpm a whirl too. Which is the root of my dilemma. I was asked to incorporate a wordpress blog into my website (yah.) It has much content and it's not feasible in the short amount of time I have to bring all the content into my CMS. Because of using Apache for years, I'm, admittedly, a little lost using nginx.

My website has the file path:

/opt/directories/mysite/public/

The wordpress files are located at:

/opt/directories/mysite/news/

I know I just need to setup location(s) that targets /news[/*] and then forces all matching URI's to the index.php within. Can someone point me in the right direction perhaps?

My configuration is below:

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;
        }
}

My php.conf file:

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 file:

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;

Thanks, in large part, to @Kromey, I have adjusted my location /news/ but I am still not getting the desired result.

I was able to learn to tack a ~ my /news location as I discovered that my php location was being matched first.

With this setup, I now get a 200 status, but the page is blank. Any ideas?

© Server Fault or respective owner

Related posts about php

Related posts about nginx