I am currently setting up our new server for our company, and we are developing alot of different apps, and right now we want to have all our wordpress apps under wp.domain.com/app1, wp.domain.com/app2, etc.

The reason the default isn't working is because we want to use the %postname% permalink for all apps.

I am currently managing by doing a rewrite for every single sub-folder, but I'd rather rewrite every single subfolder with one location block, so I don't have to edit the server block each time we upload a new application to our server.

There is also a possibility we upload to a sub-sub-directory, for example wp.domain.com/appgroup1/app3, wp.domain.com/appgroup1/app6, etc.

Here's my wp.domain.com config:

server {
  listen 80;

  root /usr/share/nginx/html/wp;
  index index.php index.html index.htm;
  server_name wp.domain.com;

  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;

  location ~ /(.*)/ {
    index index.php;
    try_files $uri $uri/ /$1/index.php?$args;

  # pass the PHP scripts to FastCGI server listening on
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one

  location ~ /\.ht {
    deny all;

Note that we don't have use a multi-site setup.

  • Post your complete nginx configuration in the question please. Oct 16, 2014 at 12:43
  • Done, see edit. Oct 16, 2014 at 13:07
  • This is going to be really messy. You should save yourself a lot of trouble, and just use subdomains. Oct 16, 2014 at 13:22
  • So it isn't possible to apply an equivalent of Apache's rewrite on every sub-folder there is? I can live with us not putting them into "sub-sub-folders", but it must be possible to add a simple rewrite for %postname% permalinks in each top-level sub-directory, right? Oct 16, 2014 at 13:40

2 Answers 2


This is time to use regex location blocks :

location ~ /(app1|app2|app3|groupapp1(?:/(subapp1|subapp2|subapp3)))/ { 
    try_files $uri $uri/ /$1/index.php$is_args$args;
    [ ... ]
  • This would still require me to edit the server block each time I add a app to our site and then restart nginx. Oct 16, 2014 at 9:28
  • Then adapt the regex and capture everything if it's what you want using (.*). But it's likely to cause issues. Oct 16, 2014 at 9:40
  • Tried with location ~ /(.*)/ { try_files $uri $uri/ /$1/index.php; index index.php; } but this downloads the index.php file for some reason. Oct 16, 2014 at 9:47
  • @Svenskunganka Do you have a location block handling php files ? Oct 16, 2014 at 9:49
  • Yes, the location /app/ { } works perfectly fine. Oct 16, 2014 at 9:49

From what I see you can just left index index.php throughout the whole server {} block and remove any /app/ locations. You don't need to rewrite anything to index.php.

  • The thing I want is Wordpress's %postname% permalink on all the sites under wp.domain.com Oct 16, 2014 at 9:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.