October 1, 2020
Estimated Post Reading Time ~

Hide /content root path in publish and website domains

How do we hide the '/content/sitename' from the URL?
It is always good to hide the content path from the public domain or publish server urls. Let us see one of the best approaches for the same.

Say we have our website in below domain URL,
https://[websitename.com]/content/sitename/fr/home.html

And hosted AEM with below URL,
http://<hostname>:<port>/content/sitename/fr/home.html

As a best practice and recommended option, we have to ensure the '/content/sitename' is hidden from appearing in the public domain.

Here I am going to explain one of the best approaches to achieving the same. To achieve this, we will have to configure things on both publish and dispatcher.

Configurations on PUBLISH:

Configuring the Apache Sling Resource Resolver Factory to ensure the URLs are re-written at the PUBLISH server.

Apache Sling Resource Resolver Factory - add below configurations under section - 'URL Mapping'

/content/sitename/(.*)</$1
/content/sitename/fr$1>/fr(.*)

Once you save the configuration and hit the webpage with http://<hostname>:<port>/fr/home.html, you will be able to see the home page over publishing instance(without /content/sitename).

Note: After saving, it takes some time to auto-restart the relevant bundles.

Configurations on DISPATCHER:

Now we are able to hit the publish server without a content path. Now let us see how this can be achieved over dispatcher or the publish domain URL.

Step1: Ensure the 'mod_rewrite' module is loaded in apache.
#
# This file loads most of the modules included with the Apache HTTP
#
LoadModule rewrite_module modules/mod_rewrite.so

Step 2: To do this set 'DispatcherUseProcessedURL' property to 1 - This will ensure the dispatcher using processed URLS.
<IfModule disp_apache.c>
# This is enabled to ensure re-writes taking effect
DispatcherUseProcessedURL 1
</IfModule>

Step 3: Now update the virtual host file and add the below rules in it.(Usually, this configuration file sits in the conf.d module)
<IfModule mod_rewrite.c>

RewriteEngine on
RewriteRule ^(.+)/$ $1

#shorten the URL
RewriteRule ^/content/sitename/(.*).html$ $1.html [R,L]
#Redirect the fr to the root folder to the home page

RewriteRule ^/?$ fr/home.html [R,L]

Now after restarting the Apache and hit the public domain URL
https://[websitename.com]/fr/home.html, you can see the home page is loading.


By aem4beginner

No comments:

Post a Comment

If you have any doubts or questions, please let us know.