Q:

is it possible to rewrite dir using .htaccess?

I am wondering whether it's possible to use .htaccess to rewrite a folder name. What I mean is this.
Lets say user type url in the browser:
https://example.com/categoryxxx/dir1/dir2/?param=aaa#hash=xxx

In the background (server):
This (root/categoryxxx/dir1/dir2/) is not exist.
This folder exist instead (root/dir1/dir2/categoryxxx/)
so the request gets pass to that folder instead.
user still see this url in their browser (nothing change for the user):
https://example.com/categoryxxx/dir1/dir2/?param=aaa#hash=xxx

how to do this in htaccess? if its not possible any other method to make it possible?
will my php [REQUEST_URI] return the user typed-in or the file in the server? is it possible to make it way around?

Note:
its not just examplecom/categoryxxx/dir1/dir2/ it can be examplecom/categoryxxx/dir1/dir2/dir3 (the number of dir is random)

A:

This probably is what you are looking for: 
RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^/?(categoryxxx)((?:/(?:[^/]+))+)/?$ /$2/$1 [END,QSA]

Implementing such a rewrite rule will not alter the entry in the superglobal php variable $_REQUEST. So $_REQUEST['REQUEST_URI'] will still contain "/categoryxxx/dir1/dir2/" which definitely makes sense. 
In case you receive an internal server error (http status 500) using the rule above then chances are that you operate a very old version of the apache http server. You will see a definite hint to an unsupported [END] flag in your http servers error log file in that case. You can either try to upgrade or use the older [L] flag, it probably will work the same in this situation, though that depends a bit on your setup. 
This implementation will work likewise in the http servers host configuration or inside a dynamic configuration file (".htaccess" file). Obviously the rewriting module needs to be loaded inside the http server and enabled in the http host. In case you use a dynamic configuration file you need to take care that it's interpretation is enabled at all in the host configuration and that it is located in the host's DOCUMENT_ROOT folder. 
And a general remark: you should always prefer to place such rules in the http servers host configuration instead of using dynamic configuration files (".htaccess"). Those dynamic configuration files add complexity, are often a cause of unexpected behavior, hard to debug and they really slow down the http server. They are only provided as a last option for situations where you do not have access to the real http servers host configuration (read: really cheap service providers) or for applications insisting on writing their own rules (which is an obvious security nightmare). 

