ConcreteCMS stores its site URL and a lot of internal path references inside the database and cache. That means you can't just copy files to a new domain and expect everything to work. Broken images, redirect loops, and blank dashboards are the usual result of a careless move. This guide covers the three most common jobs cleanly: migrating from another host, cloning to a staging folder, and updating URLs after a domain name change.
The workflow is the same at its core: move the files, move the database, reconnect the config, then fix the stored URLs. Get those four steps right and ConcreteCMS behaves.
What You Need Before You Start
- A full copy of the ConcreteCMS files (the entire web root, including hidden files like
.htaccess). - A SQL export of the database.
- The old and new database credentials.
- SSH or File Manager access on both ends.
ConcreteCMS 9.x runs comfortably on modern PHP. On our platform you can pin PHP 8.2, 8.3, or 8.4 per-domain, which we cover further down. Our servers pair LiteSpeed Web Server with NVMe MariaDB 10.11, so imports and cache rebuilds are fast even on large sites.
Step 1: Export Files and Database From the Old Host
On the old host, compress the entire ConcreteCMS directory into a single archive. If you have SSH, run this from inside the web root:
tar -czf concrete-site.tar.gz .Then export the database. From the old host's phpMyAdmin, select the database, click Export, choose Custom, and enable Add DROP TABLE so re-imports stay clean. Save the .sql file locally.
Note down the credentials from application/config/database.php. You'll need the database name, user, and password to reconnect after import.
Step 2: Upload Files to the New Host
Upload the archive to your new account's web root and extract it.
- DirectAdmin (Evolution): Go to Account Manager → File Manager, navigate to
public_html(or the domain's document root), uploadconcrete-site.tar.gz, then use the Extract action. - cPanel (Jupiter): Open Files → File Manager, browse to
public_html, click Upload, then right-click the archive and choose Extract.
Confirm that hidden files came across. In both File Managers, enable "Show Hidden Files" so you can verify .htaccess and the application/config folder exist.
Step 3: Create the Database and Import the SQL
Create a fresh empty database and a user on the new host.
- DirectAdmin: Go to Account Manager → MySQL Management, click Create new Database, set the name, username, and a strong password. Record all three.
- cPanel: Go to Databases → MySQL Databases, create the database, create a user, then attach the user to the database with ALL PRIVILEGES.
Now import your SQL file:
- DirectAdmin: From MySQL Management, click the database name to open phpMyAdmin, select the Import tab, choose your
.sqlfile, and run it. - cPanel: Open Databases → phpMyAdmin, select the new database, click Import, upload the file, and click Go.
Step 4: Reconnect the Config File
Edit application/config/database.php so it points at the new database. In File Manager, right-click the file and choose Edit. Update the connection block:
'connections' => [
'concrete' => [
'driver' => 'c5_pdo_mysql',
'server' => 'localhost',
'database' => 'newdb_name',
'username' => 'newdb_user',
'password' => 'newdb_password',
'charset' => 'utf8mb4',
],
],Save the file. Also check application/config/generated_overrides/concrete.php if it exists, as it can hold a hard-coded canonical URL you'll want to change during a domain switch (covered in Step 6).
Step 5: Set the Correct PHP Version
ConcreteCMS 9 wants PHP 8.1 or higher. Match the new host to a supported version.
- DirectAdmin: Go to Extra Features → Select PHP Version (PHP Selector), pick PHP 8.2 or 8.3, and confirm extensions like
pdo_mysql,gd,mbstring, andzipare enabled. - cPanel: Go to Software → Select PHP Version, choose 8.2 or 8.3, and tick the same extensions.
Load the front page. If it renders, clear the cache from the dashboard at System & Settings → Optimization → Clear Cache.
Step 6: Update URLs After a Domain Change
If the site is moving to a brand-new domain, the stored canonical URL and any absolute links in content must change. Start inside ConcreteCMS:
- Log in to the dashboard.
- Go to System & Settings → SEO & Statistics → URLs & Redirection.
- Set the Canonical URL to your new
https://newdomain.comand save. - Clear the cache under Optimization → Clear Cache.
For links baked into page content, run a careful find-and-replace in the database. In phpMyAdmin, use the SQL tab. Because ConcreteCMS block data is stored in many tables, target content tables directly rather than blanket-replacing everything:
UPDATE btContentLocal
SET content = REPLACE(content, 'olddomain.com', 'newdomain.com');Always back up the database before running any REPLACE query. Serialized data (found in some configs) breaks if you swap strings of different lengths, so avoid replacing inside serialized columns.
After the replace, clear the cache again and browse the site to spot-check images, menu links, and internal buttons.
Cloning ConcreteCMS to a Staging Folder
To test upgrades or redesigns safely, clone the live site into a subfolder like /public_html/staging.
- Copy the ConcreteCMS files into the
stagingfolder using File Manager's Copy action. - Create a second empty database (same panel steps as Step 3) and import a fresh export of the live database into it.
- Edit
staging/application/config/database.phpto point at the new staging database. - In the staging copy, update the canonical URL to
https://yourdomain.com/stagingunder URLs & Redirection. - Delete
staging/application/files/cache/*or clear cache from the staging dashboard.
Keeping staging on its own database means testing never touches live content. When you're happy, you can promote staging by swapping folders and databases during a quiet window.
Troubleshooting Common Migration Problems
- Blank white page: Almost always a stale cache or wrong PHP version. Clear
application/files/cache/manually and confirm PHP 8.2+. - Database connection error: Recheck
database.phpcredentials and confirm the user is attached to the database with full privileges. - Broken CSS/JS after domain change: The canonical URL is still the old domain. Fix it under URLs & Redirection, then clear cache.
- Redirect loop: A leftover redirect rule in
.htaccessor an old canonical URL forcing the previous domain. Correct both.
If your ConcreteCMS site is outgrowing a shared plan during migration, a Cloud VPS gives you dedicated resources for heavy imports and staging. Smaller sites run happily on Shared Hosting with our LiteSpeed and Redis stack. For a deeper look at when the upgrade makes sense, see our guide on when you actually need a VPS.
Frequently Asked Questions
Do I need to reinstall ConcreteCMS on the new host?
No. Migrating means copying the existing files and database, not reinstalling. A fresh install would wipe your content. Only the config file and canonical URL need updating.
Will changing my domain hurt SEO?
It can if you don't set up redirects. Keep the old domain pointed at the new one with 301 redirects in .htaccess, and update the canonical URL inside ConcreteCMS so search engines see one authoritative address.
Why does my cloned staging site show live content changes?
That happens when both copies share the same database. Each clone must have its own separate database and its own database.php connection, or edits in one will appear in the other.