Skip to content
Advertisement

PHP Laravel – Allow users to use a custom domain name

I’ve looked through pretty much every single page I could find on the topic, but I’m still bit confused.

I have a PHP Laravel 4.0 web site, which is at

http://www.mywebsite.com

When a user signs up, each user gets their own page

http://user1.mywebsite.com

I have set the above via wildcard sub domain on my VPS DNS manager (Linode).

And in my Laravel, I have a domain route that picks up the subdomain and displayes the correct user’s page. All works well.

Now, what I want to achieve is have a user use their own domain name and point to their page on my website.

So if a user signs up with

http://www.user1domain.com

I’d like this domain to point to http://user1.mywebsite.com

I do not want a redirect, but the URL to remain at http://www.user1domain.com (obviously).

I know that sites like Tumblr allows this.

What steps do I take in achieving this? Here are somethings I thought of during my research.

  1. Have the user to make their custom domain “user1domain.com” to point to my VPS name server (easy).

  2. On my end (here’s where I fall short), do I

    • Create a new DNS entry? (In my Linode VPS, I would do this in “DNS Manager” and “Add a domain zone”)

    • I’m using Apache, so do I have to create a VirtualHost (like I do for all of my other sites), does this mean I have to create a new VirtualHost file for every user who wants to use a custom domain?

    • If NOT VirtualHost, how do I actually point to my web application folder? Apache alias? (How do I set that up?)

  3. Assuming the user’s domain name now “points” to my web application, how do I now pick that up in Laravel? (I’m guessing I’d do this the same way I do for my sub domains)

Thanks for your time.

Advertisement

Answer

Question: Create a new DNS entry? (In my Linode VPS, I would do this in “DNS Manager” and “Add a domain zone”)

Answer: Yes, you’ll need to ask your user to point their domain to your nameserver. You’ll also have to add their domains into your DNS Manager.

Question: I’m using Apache, so do I have to create a VirtualHost (like I do for all of my other sites), does this mean I have to create a new VirtualHost file for every user who wants to use a custom domain?

If NOT VirtualHost, how do I actually point to my web application folder? Apache alias? (How do I set that up?)

Answer: You can set up just one virtual host configuration for all, as documented in Using default vhosts.

JavaScript

So all domain names that are requesting to your server will be served by your only one code base.

Question: Assuming the user’s domain name now “points” to my web application, how do I now pick that up in Laravel? (I’m guessing I’d do this the same way I do for my sub domains)

I can think of two ways right now. Yes you could adapt Laravel’s documentation on Sub-Domain Routing, but use for different domains instead:

JavaScript

But I suppose that functionalities will be quite the same between different domains, it’s only the data that changes, you could use always use:

JavaScript

So you get the domain, and perhaps map it to a website_id column in your database to get the correct content.

Make sure you whitelist the acceptable domain names carefully in your project. Letting all domain names in isn’t a good idea. You could limit by using ServerName and ServerAlias in your virtual host as well, but I guess that limits the flexibility of letting new users have their own domains.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement