When you want to serve the contents of /var/www/john through john.mysite.com instead of mysite.com/john, you'll need to configure both DNS and Apache settings. Here's the complete workflow:
First, create a DNS A record pointing to your server's IP:
john.mysite.com. IN A 192.0.2.1
If you're using a control panel like cPanel or Plesk, you can add this through their interface. For manual DNS management, edit your zone file accordingly.
Create a new virtual host configuration file:
sudo nano /etc/apache2/sites-available/john.mysite.com.conf
Add the following configuration:
<VirtualHost *:80>
ServerName john.mysite.com
DocumentRoot /var/www/john
ErrorLog ${APACHE_LOG_DIR}/john-error.log
CustomLog ${APACHE_LOG_DIR}/john-access.log combined
<Directory /var/www/john>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Enable the site and reload Apache:
sudo a2ensite john.mysite.com.conf sudo systemctl reload apache2
Check for syntax errors:
sudo apache2ctl configtest
If everything is correct, you should see "Syntax OK". Then test the subdomain in your browser or using curl:
curl -I http://john.mysite.com
To redirect old URLs from mysite.com/john to john.mysite.com, create or modify /var/www/john/.htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^john/(.*)$ http://john.mysite.com/$1 [L,R=301]
If the subdomain isn't working:
- Check DNS propagation using
dig john.mysite.com - Verify Apache is listening to the subdomain with
sudo apache2ctl -S - Ensure directory permissions are correct:
sudo chown -R www-data:www-data /var/www/john
When working with LAMP stack on Ubuntu, you might want to elevate a subdirectory to a proper subdomain for better URL structure or organizational purposes. This requires both DNS and Apache configuration changes.
- Ubuntu server with LAMP stack - Root or sudo access - Ability to modify DNS records - Apache's mod_vhost_alias enabled (usually is by default)
First, add a CNAME or A record for your subdomain in your DNS management panel:
john.mysite.com. 300 IN CNAME mysite.com.
Or if using A record:
john.mysite.com. 300 IN A 192.0.2.1
Create a new configuration file for your subdomain:
sudo nano /etc/apache2/sites-available/john.mysite.com.conf
Add this configuration:
<VirtualHost *:80>
ServerName john.mysite.com
DocumentRoot /var/www/john
<Directory /var/www/john>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/john-error.log
CustomLog ${APACHE_LOG_DIR}/john-access.log combined
</VirtualHost>
Run these commands to enable the configuration:
sudo a2ensite john.mysite.com.conf sudo systemctl reload apache2
To redirect mysite.com/john to john.mysite.com, add this to your main site's .htaccess:
RewriteEngine On RewriteRule ^john(.*)$ http://john.mysite.com$1 [R=301,L]
Check your configuration with:
sudo apache2ctl configtest
If everything is OK, test by accessing john.mysite.com in your browser.
If you need HTTPS, generate a certificate with Let's Encrypt:
sudo certbot --apache -d john.mysite.com
- DNS changes may take up to 48 hours to propagate
- Check Apache error logs if the subdomain doesn't work
- Ensure proper permissions on the /var/www/john directory
- Clear your browser cache when testing