Peter
Peter

Reputation: 1296

htaccess rewrite with subdomain as variable

I have a sitename.net and in a root directory i have .htaccess and index.php .htaccess is:

FallbackResource /index.php

so basically as it's empty site (no sub directories, no files etc...) I will get a fallback to index.php which contains this:

$path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
$elements = explode('/', $path);                // Split path on slashes
echo "Domain is: $domain <br>";
if(empty($elements[0])) {                       // No path elements means home
    echo "ShowHomepage()";
} 
else switch(array_shift($elements)) {             // Pop off first item and switch
    case 'tests':
      echo "First is test";
    case 'sample':
      echo "First is sample";
    default:
        header('HTTP/1.1 404 Not Found');
        Show404Error();
}

my problem is that when visitor enters: https://username.sitename.net/tests/test1 I get error as subdomain doesn't exist... When I go to "https://sitename.net/tests/test1" i get what I want but I need username as a variable as well.

Should I first do rewrite in .htaccess so it translate https://username.sitename.net/tests/test1 as https://sitename.net/username/tests/test1 and than redo index.php so it pickup a first array element as username or there is another option ?

Can somebody help me out ?

------------- EDIT ----------------

I've ended up pointing A record *.sitename.net to server IP I've changed .htaccess so it's:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*)\.sitename\.net
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

FallbackResource /index.php

...and still getting 404 error... still can't get: https://username.sitename.net/tests/test1 to act like https://sitename.net/username/tests/test1 so index.php will do it stuff...

Upvotes: 1

Views: 66

Answers (2)

Rentabear
Rentabear

Reputation: 300

I think wildcard DNS records is what you're looking for.

https://en.wikipedia.org/wiki/Wildcard_DNS_record

All subdomains will then redirect to your DNS, which you can redirect to your server.

EDIT: Once the subdomains are up and running, you can use .htaccess rewrite subdomain to directory to fix the htaccess.

Upvotes: 1

Gabor
Gabor

Reputation: 572

This work with php redirect too:

$url = "https://gbr8295.sitename.net"; //$_SERVER['HTTP_HOST']

if (substr($_SERVER['HTTP_HOST'], 0, 16) != 'https://sitename') { // You need edit 16 to a correct number for your domain
   $username = substr($url, 8, ((strpos($url, '.') - 8)));
   $new_url = "https://sitename.net/".$username."/";

   echo $url."<br>"; // Output: https://gbr8295.sitename.net
   echo $new_url; // Output: https://sitename.net/gbr8295/

   header("Location: $new_url");
   exit;
} else {
   echo 'ok';
}

Upvotes: 0

Related Questions