
Remove /web part from a Composer based Drupal site
By default when you create your Drupal project using composer it will create project under /web directory.
When you’re using shared hosting for your Drupal website which points your domain to /public_html folder and you’re not allow to change that pointing directory
Now whenever your targeted audience will have to visit your website they have to open it like this and which is not a good user experience to add /web at the end of your url to view Home page of your website.
So, How can we serve our website from /public_html/web folder but no need to append /web in URL by your targeted audience?
1. Open your settings.php file and add the following code:
if ( isset($GLOBALS[‘request’]) && ‘/web/index.php’ === $GLOBALS[‘request’]->server->get(‘SCRIPT_NAME’) ) { $GLOBALS[‘request’]->server->set(‘SCRIPT_NAME’, ‘/index.php’); }
2. Create a .htaccess file on the /public_html folder with:
<IfModule mod_rewrite.c> RewriteEngine on # Redirect to the subdirectory because that’s where Drupal is installed RewriteRule (.*) web/$1 [L] </IfModule> |
3. Update .htaccess under /public_html/web folder
Uncomment the line RewriteBase and set it to:
RewriteBase /web |
4. Clear the cache and run update.php
Your site should work by browsing http://example.com now [ i.e. without the /web suffix ]. Your menu items may still have the /web part, but it will be gone after some hard refresh.
5. If you want to redirect http/https and www/non-www:
On the .htaccess file under /public_html/web, please add those lines between the <IfModule mod_rewrite.c> tag
This is to redirect non-https + www to https + non-www:
RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule (.*) https://example.com/$1 [L,R=301] |
And this is to redirect non-https + non-www to https + www”
RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(.*)$ [NC] RewriteRule (.*) https://www.%1/$1 [R=301,L] |