criuz  
                
               
                 
              
                  
                    March 20, 2015, 12:14pm
                   
                   
              1 
               
             
            
              I tried this example [Omitting the blog folder in URLs][1], and it works great for content structure like this:
../content/blog/page/page.txt
 
But I need to get it working for a more nested structure like this:
../content/blog/subdir/page/page.txt
 
How is this done? 
Thank you so much! 
[1]: http://getkirby.com/docs/advanced/routing#omitting-the-blog-folder-in-urls 
             
            
               
               
              1 Like 
            
                
            
           
          
            
            
              Sorry I haven’t had time to set up an example and test it, but try something like this in your config.php :
c::set('routes', array(
  array(
    
    'pattern' => '/(:any)/(:any)',
    'action'  => function($subdir, $uid) {
      $page = page($uid);
      if(!$page) $page = page($subdir. '/' . $uid);
      if(!$page) $page = page('blog/' . $subdir. '/' . $uid);
      if(!$page) $page = site()->errorPage();
      return site()->visit($page);
    }
  ),
  array(
    'pattern' => 'blog/(:any)/(:any)',
    'action'  => function( $subdir, $uid ) {
      
      return go( $subdir . '/' . $uid );
    }
  ),
));
 
             
            
               
               
               
            
            
           
          
            
              
                criuz  
                
               
              
                  
                    March 21, 2015,  4:37pm
                   
                   
              3 
               
             
            
              Thanks that did the trick for subdirs, but now I’m stuck with the problem that it won’t work for the non-subdirs.
Here is what I tried without luck:
c::set('routes', array(
  array(
    
    'pattern' => '(:any)/(:any)',
    'action'  => function($subdir, $uid) {
      $page = page($uid);
      if(!$page) $page = page($subdir. '/' . $uid);
      if(!$page) $page = page('clients/' . $subdir. '/' . $uid);
      if(!$page) $page = site()->errorPage();
      return site()->visit($page);
    }
  ),
  array(
    'pattern' => 'clients/(:any)/(:any)',
    'action'  => function($subdir, $uid ) {
      
      return go($subdir . '/' . $uid);
    }
  ),
  array(
    'pattern' => '(:any)',
    'action'  => function($uid) {
      $page = page($uid);
      if(!$page) $page = page('clients/' . $uid);
      if(!$page) $page = site()->errorPage();
      return site()->visit($page);
    }
  ),
  array(
    'pattern' => 'clients/(:any)',
    'action'  => function($uid) {
      go($uid);
    }
  )
)); 
             
            
               
               
               
            
            
           
          
            
            
              So you have some posts inside /blog and some inside /blog/subdir/ ?
I think it would help if you provide an example of the file structure of your /content folder
It starts to get messy, but it sounds like you mean:
'pattern' => '(:any)/(:any)',
'action'  => function($subdir, $uid) {
  $stub = 'clients';
  $page = page($uid);
  if(!$page) $page = page($subdir. '/' . $uid); // something/else
  if(!$page) $page = page($stub . '/' . $subdir. '/' . $uid); // clients/something/else
  if(!$page) $page = page($stub . '/' . $uid); // clients/else
  if(!$page) $page = site()->errorPage();
  return site()->visit($page);
}
 
             
            
               
               
               
            
            
           
          
            
              
                criuz  
                
               
              
                  
                    March 23, 2015, 11:00pm
                   
                   
              5 
               
             
            
              My folder structure is as following (with my desired URLs below):
Page 1:
../content/admin/
http://view.mxr.at/admin/
Page 2:
../content/clients/client-a/
http://view.mxr.at/client-a/
Page 3:
../content/clients/client-a/page-a/
http://view.mxr.at/client-a/page-a/
 
I just tried your code and Page 1 (of course) and Page 3 are working fine. Only Page 2 is redirecting me to the error page. How can I bugfix this?
Thanks!
             
            
               
               
              1 Like 
            
            
           
          
            
              
                Ozy  
                
               
              
                  
                    March 24, 2015,  1:52am
                   
                   
              6 
               
             
            
              I tried it on mine and the following works. However I believe there is a bug because it should have worked by just replacing :any with :all and using just one varialbe, instead of doing (:any)(:all)
c::set('routes', array(
   array(
      'pattern' => 'clients/(:all)',
      'action'  => function($uid) {
         go($uid);
      }
   ),
   array(
      'pattern' => '(:any)(:all)',
      'action'  => function($u1,$u2) {
         $page = page($u1.$u2);
         if(!$page) $page = page('clients/' . $u1.$u2);
         if(!$page) $page = site()->errorPage();
         return site()->visit($page);
      }
   )
)); 
             
            
               
               
              4 Likes 
            
                
            
           
          
            
              
                criuz  
                
               
              
                  
                    March 24, 2015,  6:29pm
                   
                   
              7 
               
             
            
              Works!! Thank you so much!