Why is my website serving the wrong content?
I am hosting multiple domains on my Linode, but whenever I attempt to go to one domain, it's serving me the content of another domain. Is this a redirect issue? The URL doesn't change when I load the domain in my browser, but it's showing content for one of the other websites hosted on the Linode. I am running a LAMP stack on Debian.
1 Reply
Hey there!
It sounds to me like the issue you are experiencing is a misconfiguration with your Linode's virtual hosts file. If it's loading another domain that is hosted on the Linode, there are two places I would recommend checking in the domain files. First I would look for any wayward redirects that are moving example1.com to example2.com. Because the URL isn't changing, however, the more likely culprit is going to be the DocumentRoot for these domains.
I would recommend taking a look at the /etc/apache2/sites-available/ directory on your Linode to locate the .conf files for your individual domains. These will be the virtual host files. A virtual host file for example1.com, for example, would likely be named /etc/apache2/sites-available/example1.conf and look like the following:
<VirtualHost *:80>
# The primary domain for this host
ServerName example1.com
# Optionally have other subdomains also managed by this Virtual Host
ServerAlias example1.com *.example1.com
DocumentRoot /var/www/html/example1.com/public_html
<Directory /var/www/html/example1.com/public_html>
Require all granted
# Allow local .htaccess to override Apache configuration settings
AllowOverride all
</Directory>
# Enable RewriteEngine
RewriteEngine on
RewriteOptions inherit
# Block .svn, .git
RewriteRule \.(svn|git)(/)?$ - [F]
# Catchall redirect to www.example1.com
RewriteCond %{HTTP_HOST} !^www.example1\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) https://www.example1.com/$1 [L,R]
# Recommended: XSS protection
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
</VirtualHost>
A configuration file for example2.com would likely be named /etc/apache2/sites-available/example2.conf and look like the following:
<VirtualHost *:80>
# The primary domain for this host
ServerName example2.com
# Optionally have other subdomains also managed by this Virtual Host
ServerAlias example2.com *.example2.com
DocumentRoot /var/www/html/example2.com/public_html
<Directory /var/www/html/example2.com/public_html>
Require all granted
# Allow local .htaccess to override Apache configuration settings
AllowOverride all
</Directory>
# Enable RewriteEngine
RewriteEngine on
RewriteOptions inherit
# Block .svn, .git
RewriteRule \.(svn|git)(/)?$ - [F]
# Catchall redirect to www.example2.com
RewriteCond %{HTTP_HOST} !^www.example2\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) https://www.example2.com/$1 [L,R]
# Recommended: XSS protection
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
</VirtualHost>
Because the URL isn't changing when you load example1.com but it's serving the content of example2.com, I suspect the DocumentRoot for example1.com shows /var/www/html/example2.com/public_html instead of /var/www/html/example1.com/public_html. If you change that then reload Apache by running sudo systemctl reload apache2 I believe you should be good to go. You can read more about properly setting up Apache's virtual hosts for multiple domains at our Configure Worpress to run Multiple Domain guide.
I hope this helps!