nginx wordpress pretty permalinks

After almost every subject about nginx & wp pretty permalinks I’m stucked :/

Here’s my configuration of my test wp site (my DNS is updating so I haven’t one yet):

Read More
# W3TC config rules based on http://elivz.com/blog/single/wordpress_with_w3tc_on_nginx/
server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6
    # Tell nginx to handle requests for the www.orpheecole.com domain
    server_name         localhost;
    index               index.php index.html index.htm;
    root                /var/www/test_wp;
    access_log          /var/log/nginx/testWp_access.log;
    error_log           /var/log/nginx/testWp_error.log;
    # Use gzip compression
    # gzip_static       on;  # Uncomment if you compiled Nginx using --with-http_gzip_static_module
    gzip                on;
    gzip_disable        "msie6";
    gzip_vary           on;
    gzip_proxied        any;
    gzip_comp_level     5;
    gzip_buffers        16 8k;
    gzip_http_version   1.0;
    gzip_types          text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/png image/gif image/jpeg;
    # Rewrite minified CSS and JS files
    rewrite ^/wp-content/w3tc/min/([a-f0-9]+)/(.+).(include(-(footer|body))?(-nb)?).[0-9]+.(css|js)$ /wp-content/w3tc/min/index.php?tt=$1&gg=$2&g=$3&t=$7 last;
    # Set a variable to work around the lack of nested conditionals
    set $cache_uri $request_uri;
    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
        set $cache_uri 'no cache';
    }
    if ($query_string != "") {
        set $cache_uri 'no cache';
    }
    # Don't cache uris containing the following segments
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php)") {
        set $cache_uri "no cache";
    }
    # Don't use the cache for logged in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
        set $cache_uri 'no cache';
    }
    # similar to Apache Status - handy for quickly checking the health of nginx
    location /nginx_status {
                stub_status on;
                access_log off;
                allow all;
    }
    # Use cached or actual file if they exists, otherwise pass request to WordPress
    location / {
        try_files /wp-content/w3tc/pgcache/$cache_uri/_index.html $uri $uri/ /index.php?$args;
    }
    # Cache static files for as long as possible - removed xml as an extension to avoid problems with Yoast WordPress SEO plugin which uses WP rewrite API.
    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        try_files       $uri =404;
        expires         max;
        access_log      off;
    }
    # Deny access to hidden files
    location ~* /.ht {
        deny            all;
        access_log      off;
        log_not_found   off;
    }
    # Pass PHP scripts on to PHP-FPM
    include global/php-fpm.conf;
    location ~* .php$ {
        fastcgi_index   index.php;
        fastcgi_pass    php5-fpm-sock;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

Here’s the ‘global’ file included in every of my site

# PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
location ~ .php$ {
   # The following line prevents malicious php code to be executed through some uploaded file (without php extension, like image)
   # This fix shoudn't work though, if nginx and php are not on the same server, other options exist (like unauthorizing php execution within upload folder)
   # More on this serious security concern in the "Pass Non-PHP Requests to PHP" section, there http://wiki.nginx.org/Pitfalls
   try_files $uri =404;

   # PHP
   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
   #fastcgi_pass   127.0.0.1:9000;
   fastcgi_pass php5-fpm-sock;
   fastcgi_index  index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include fastcgi_params;
   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_intercept_errors        on;
   fastcgi_ignore_client_abort     off;
   fastcgi_connect_timeout 60;
   fastcgi_send_timeout 180;
   fastcgi_read_timeout 180;
   fastcgi_buffers 4 256k;
   fastcgi_buffer_size 128k;
   #fastcgi_buffers 256 16k;
   #fastcgi_buffer_size 16k;
   fastcgi_busy_buffers_size 256k;
   fastcgi_temp_file_write_size 256k;
}

In wp I have installed the nginx-helper plugin but nothing changes, as soon as I switch to pretty permalinks every post & category returns a 404 error

Related posts

Leave a Reply

2 comments

  1. ok problem solved, here what saved me ^^

    add the following under server { directive

    if ($host ~* ^myhost.com$) {
        rewrite ^(.*) http://www.myhost.com$1 permanent;
        break;
    }