Jump to:

10987 Posts in 2724 Topics by 1817 members

All other Modules

SilverStripe Forums » All other Modules » Subsite module, DNS configuration

Discuss all other Modules here.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1 2 3
Go to End
Author Topic: 6146 Views
  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Subsite module, DNS configuration Link to this post

    PS Benny in the .htaccess I have also tried subsite1.mysilverstripe, since I want to access the subsite via http://subsite1.mysilverstripe

    # Subsite rewrite
    RewriteCond %{REQUEST_URI} !(\.gif)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\.php)$
    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{HTTP_HOST} ^subsite1.mysilverstripe$
    RewriteRule .* sapphire/main.php?url=%{REQUEST_URI}&SubsiteID=1&%{QUERY_STRING} [L]

    and Benny i presume your vhost.conf is the equivalent (the file I should be trying to replicate on my WAMP machine) of my WAMP httpd-vhosts.conf files??? I'm not 100% sure.

  • bennylope
    Avatar
    Community Member
    12 Posts

    Re: Subsite module, DNS configuration Link to this post

    I'm not sure how you should go about testing this out on a WAMP server. I was doing all of this on a server running Plesk (which manages much of Apache's configuration).

    You probably need to take a look at how to set up multiple domains on a WAMP server first. http://www.google.com/search?aq=1&oq=wamp+mult&sourceid=chrome&ie=UTF-8&q=wamp+multiple+domains Once you have two working and configurable domains on your machine I think you should be able to start making the subsite specific changes.

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Subsite module, DNS configuration Link to this post

    Benny I think that is what I have been doing as far as I know (setting up multiple domains). eg

    On Wamp you edit the "hosts" file

    127.0.0.1 localhost
    127.0.0.1 mysilverstripe
    127.0.0.1 subsite1.mysilverstripe

    and then edit httpd-vhosts.conf

    and add in a <VirtualHost> chunk for each domain, or use the serveralias tag also

    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "f:/wamp/www/silverstripe/silverstripe-v2.4.0-rc2"
    ServerName mysilverstripe
    ErrorLog "logs/mysilverstripe.log"
    CustomLog "logs/mysilverstripe.log" common
       
    <directory "f:/wamp/www/silverstripe/silverstripe-v2.4.0-rc2">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    </directory>

    </VirtualHost>

    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "f:/wamp/www/silverstripe/silverstripe-v2.4.0-rc2"
    ServerName subsite1.mysilverstripe
    ErrorLog "logs/mysilverstripe.log"
    CustomLog "logs/mysilverstripe.log" common
       
    <directory "f:/wamp/www/silverstripe/silverstripe-v2.4.0-rc2">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    </directory>

    </VirtualHost>

    now when I go to

    mysilverstripe or subsite1.mysilverstripe they both go to the same main home page of the silverstripe site.

    Any ideas?

  • bennylope
    Avatar
    Community Member
    12 Posts

    Re: Subsite module, DNS configuration Link to this post

    If both domains on your WAMP server are resolving to the same SilverStripe site, then it sounds like your set up works. You just need to correctly intercept the domain name in the .htaccess file and append the SubsiteID.

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Subsite module, DNS configuration Link to this post

    bennylope because I am on the grid service I don't have access to vhost.conf and MT have just said to use the .htaccess file

    So I presume your working setup will not function for me... Does that mean I am out of options for getting this thing to run correctly?
    I mean I guess I could always just create a subsites.mydomain.com directory and then create a file that redirects to the subsites page eg:
    http://mydomain.com/subhome?SubsiteID=1

    It kind of makes it difficult for when someone makes a subsite though as I would have to go and create this redirect manually, not something I really want to be doing actually.

    I have tried to contact Sam the guy that wrote the subsites module and some of the other Silverstripe developers but I haven't been able to get any assistance.

    Any other ideas?

  • bennylope
    Avatar
    Community Member
    12 Posts

    Re: Subsite module, DNS configuration Link to this post

    I'd try simply creating another domain, whether a subdomain on your Grid Service domain or registered without hosting, and then set the A Record for that domain to point at your primary domain. With the .htaccess file in place, this should provide the correct subsite.

    This is conjectural however, and I haven't tested it out myself.

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Subsite module, DNS configuration Link to this post

    Bennylope I have not tried what you suggested in your last post, but back trying to get my WAMP to run it, to best show you my setup I have collated an image together showing the screenshots of what my subsites setup looks like.

    http://www.flickr.com/photos/42659897@N08/4597647580/sizes/l/

    WillR said that getting subdomains to resolve are the bulk of peoples troubles with the module and to go through the subsite.php and debug the getSubsiteID function to find out what is going wrong.

    I've done my best to try and get some information from the variables to work on what is going on and atempt to do some cross checking but I don't seem to be getting to far with it, all

    #Debug::show($host); gives me is subsite1.mysilverstripe

    Got any ideas on what or how I should be debugging this to work out what is going on?

    /**
        * Get a matching subsite for the given host, or for the current HTTP_HOST.
        *
        * @param $host The host to find the subsite for. If not specified, $_SERVER['HTTP_HOST']
        * is used.
        *
        * @return int Subsite ID
        */
       static function getSubsiteIDForDomain($host = null, $returnMainIfNotFound = true) {
          
             
          if($host == null) $host = $_SERVER['HTTP_HOST'];      
          
          $host = str_replace('www.','',$host);
          $SQL_host = Convert::raw2sql($host);
          

          $matchingDomains = DataObject::get("SubsiteDomain", "'$SQL_host' LIKE replace(\"SubsiteDomain\".\"Domain\",'*','%')",
             "\"IsPrimary\" DESC", "INNER JOIN \"Subsite\" ON \"Subsite\".\"ID\" = \"SubsiteDomain\".\"SubsiteID\" AND
             \"Subsite\".\"IsPublic\"=1");
       
          if($matchingDomains) {
             $subsiteIDs = array_unique($matchingDomains->column('SubsiteID'));
             if(sizeof($subsiteIDs) > 1) user_error("Multiple subsites match '$host'", E_USER_WARNING);
             return $subsiteIDs[0];
          }
       
          // Check for a 'default' subsite
          if ($default = DataObject::get_one('Subsite', "\"DefaultSite\" = 1")) {
             return $default->ID;
          }
                      
          // Default subsite id = 0, the main site
          return 0;

    Another related function

    /**
        * This function gets the current subsite ID from the session. It used in the backend so Ajax requests
        * use the correct subsite. The frontend handles subsites differently. It calls getSubsiteIDForDomain
        * directly from ModelAsController::getNestedController. Only gets Subsite instances which have their
        * {@link IsPublic} flag set to TRUE.
        *
        * You can simulate subsite access without creating virtual hosts by appending ?SubsiteID=<ID> to the request.
        *
        * @todo Pass $request object from controller so we don't have to rely on $_REQUEST
        *
        * @param boolean $cache
        * @return int ID of the current subsite instance
        */
       static function currentSubsiteID() {      
          if(isset($_REQUEST['SubsiteID'])) $id = (int)$_REQUEST['SubsiteID'];
          else $id = Session::get('SubsiteID');

          if($id === NULL) {
             $id = self::getSubsiteIDForDomain();
             Session::set('SubsiteID', $id);
          }

          return (int)$id;
       }

    Did you try doing this at all???

  • TF-35Lightning
    Avatar
    Community Member
    137 Posts

    Re: Subsite module, DNS configuration Link to this post

    bennylope ignore my last post about getting it working on WAMP, it is now working thank the lord!

    I had to have

    subsite1.mysilverstripe

    as the domain in the backend of the CMS subsite section if I want to access subsite1 via subsite1.mysilverstripe

    now to try and figure out a solution for a grid service where I can't access the apache virtual host files...

    6146 Views
Page: 1 2 3
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.