It will help you improve your skills and understand how to start this journey!
WordPress require some management when is behind a reverse proxy and depends a lot on how much this reverse proxy changes “things”.
Every service is different (Apache, Nginx, FrontDoor, CloudFlare, etc), if the folder is in a subfolder or a subdomain, if require a ssl certificate but the final page will use a different one and so on.
An example with Apache
In this case we will use, as example, a website in a subfolder on the final domain but in reality is a subdomain (so we can generate a dedicated ssl certificate, because the reverse proxy require that the original domain have one for validation, in this example).
This is an example of the VirtualHosts for Apache, this is something that you can’t configure in CPanel but only on your own VPS.
<IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot "/var/www/your-folder" Alias /your-folder/ "/var/www/your-folder"/" ServerName your-definitive-domain.com ServerAlias www.your-definitive-domain.com ServerAlias your-subdomain.domain.com ServerAdmin webmaster@localhost <Directory "/var/www/your-folder""> allow from all Order allow,deny AllowOverride All Require all granted </Directory> SSLEngine off #LogLevel debug SSLCertificateFile /etc/letsencrypt/live/your-subdomain.domain.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your-subdomain.domain.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
In this config, it is define the folder path, the various domains who will respond it. Also, we have a ssl certificate, to generate it set (only) as servername your-subdomain.domain.com
, execute certbot
(to get a Let’s Encrypt certificate) and later set the servername as in the snippet.
There is also the parameter ready to enable the full log to apache in case you need it.
Reload apache and now the domain will respond rightly to your-definitive-domain.com/your-folder
, now you need to set the domain in the reverse proxy of your choice.
Few PHP lines for your wp-config.php
Another step is a tiny code in your wp-config.php
(this file is not changed by the WordPress updates).
WordPress basically will work with a reverse proxy setting the your-definitive-domain.com
as domain, but with permalinks enabled and with plugins that manipulate the URLs this is not enough.
Like for this case with Polylang (a multilanguage plugin, that change the URL based on the browser language, subdomain support per locale like a multisite etc) it is required another step.
As PHP side is not able to identify that the request is from the reverse proxy, will map the URL internally as your-subdomain.domain.com
instead of your-definitive-domain.com
.
So we need to set some global PHP variables to the right domain manually.
if ( isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == 'your-subdomain.domain.com' ) { $_SERVER['HTTP_HOST'] = 'your-definitive-domain.com'; } $_SERVER['SERVER_NAME'] = 'your-definitive-domain.com';
In this way the web server is managing everything rightly, also WordPress will use the right domain from the PHP data and the DB data on the installation and they will match.
Without that snippet is not able to identify the host and will go in a redirect loop.