.htaccess rewrite: subdomain as GET var and path as GET var
.htaccess, apache, mod-rewrite, php
Solution
Use the first rule to add the `subdomain` parameter, without changing the URI, then use the 2nd rule to route the URI to `index.php`:
RewriteEngine On
# Parse the subdomain as a variable we can access in PHP, and
# run the main index.php script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$
RewriteRule ^(.*)$ /$1?subdomain=%1
# Map all requests to the 'path' get variable in index.php
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [L,QSA]
The second rule needs to have the `QSA` flag, otherwise the first rule's query string gets lost.
Problem
Desired result: ``` http://example.com/ -> index.php http://www.example.com/ -> index.php http://hello.example.com/ -> index.php?subdomain=hello http://whatever.example.com/ -> index.php?subdomain=whatever http://example.com/world -> index.php?path=world http://example.com/world/test -> index.php?path=world/test http://hello.example.com/world/test -> index.php?subdomain=hello&path=world/test ``` With the .htaccess I have right now, I can achieve one or the other re-mapping, but not both at the same time. ``` RewriteEngine On # Parse the subdomain as a variable we can access in PHP, and # run the main index.php script RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} !^www RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$ RewriteRule ^.*$ index.php?subdomain=%1 # Map all requests to the 'path' get variable in index.php RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?path=$1 [L] ``` I'm having a hard time combining the two...any pointers, please? EDIT The unwanted behavior I'm experiencing now is that if I have a subdomain and a path after .com/, only the subdomain will be passed through, ie: ``` http://hello.example.com/world-> index.php?subdomain=hello ```