Use mod_substitute in Apache

The essence mod_substitute is to replace the text in the body of the response from the web server. With it you can change for example links to one domain with links to another domain without interfering with the site code.

You can check if the module is loaded like this:

/usr/sbin/apachectl -t -D DUMP_MODULES 2>&1|grep subst

Or make sure the following line is present and not commented out in the httpd.conf file:

LoadModule substitute_module modules/mod_substitute.so

Let’s say you have a website with the domain name mysite.com. You need to make the site dev.mysite.com out of it, but there are links to the mysite.com hardcoded in the database and website files.

There is an option to update the database and files but you can go the path of least resistance and add the following construction to .htaccess:

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|mysite.com|dev.mysite.com|in"
Substitute "s|www.mysite.com|dev.mysite.com|in"

The first line indicates the type of files that will be replaced.

If you also have customized scripts, make the server process them including:

AddOutputFilterByType SUBSTITUTE text/javascript

In case of problems, check Apache site settings. Pay attention to:

AllowOverride All

Substitute is sensitive to the Accept-Ranges header. In case of problems try adding the following to the Substitute construct in your .htaccess file:

Header set Accept-Ranges "none"