Welcome to Tech Mastery, your expert source for insights into technology and digital strategy. Explore topics like Adobe Experience Manager, AWS, Azure, generative AI, and advanced marketing strategies. Delve into MACH architecture, Jamstack, modern software practices, DevOps, and SEO. Our blog is ideal for tech professionals and enthusiasts eager to stay ahead in digital innovations, from Content Management to Digital Asset Management and beyond.
This tutorial explains the details on how to configure search collection in Adobe Search and Promote to support multiple environments through same account.
Collection in Search and Promote
The collections can be used to allow customers to search specific areas of a website so that they can quickly find what they are looking for.
For example, customers can search a collection of URLs that are related to product sales or to support services.
Each collection is specified on a single line with a name and a URL mask. A URL mask can consist of the following:
To make a mask a regular expression, you insert the keyword regexp between the collection name and the URL mask e.g FAQs regexp ^.*/faqs
The IndexConnector URL entry points can be referenced to the collection as below
QA regexp index:test-feed*
Each line in the Collections field can contain only one URL mask. However, you can specify multiple URL masks for the same collection name on different lines.
The collection=<Collection Name> e.g. collection=Support parameters specifies the collection to use for the search.This parameter maps to the sp_k backend search parameter, sp_k=<Collection Name> e.g. sp_k=Support
Configuring Collection
One of the best scenario to use the collection is indexing the data for multiple environments e.g QA, UAT etc into a same Adobe Search and Promote account, the collection parameters can be used to search the documents specific to the environment.
I am using the IndexConnector as a URL entry point to index the data through XML feed files but the URL entry points can be a website URL with links.
Refer the below URL for more details on configuring Index Connector.
Enable the IndexConnector for both QA and UAT data feeds, Settings → Crawling →Index Connector
Add the IndexConnector configurations to the URL entry points, Setting → Crawling → URL Entrypoints, the URL entry points can be configured as environment specific URL’s instead of IndexConnector
e.g
https://uat.example.com/search_index.html
https://qa.example.com/search_index.html
Configure the collection Settings → Searching → Collections, the collection can be also configured as environment specific URL masks
e.g.
UAT https://uat.example.com/products
QA https://qa.example.com/products
The configurations are ready, let us now run a Stage indexing (note the configuration are not pushed to live yet)
Index →Full Index →Staged Index →Run Full Index
The collections can be tested through collection page “Test Collections” option
Specify the search index URL, the index URL can be taken from Reports → Data Views →Default View, for index connector the URL is formed based on the primary key defined in IndexConnector definition(our case product id)
The search collection can be used to enable the user to search on a specific section of the website e.g products, materials etc . The collection functionality can be also used to enable the search functionality for different environments(e.g QA and UAT) in the same Adobe Search and Promote Account.
This tutorial explains how to share or access the local files externally through ngrok and Python http server.
I have the below two scenarios
a set of files that needs to be shared outside
share a simple website externally
The above scenarios can be achieved through Apache Server and external DNS configurations but require more configurations efforts.
Prerequisites
ngrok free or paid version
Python latest version
Let us see how to enable the above scenarios through ngrok and python HTTP server with minimal configuration effort.
As a first step download ngrok(ngrok.com) for the required OS and extract the files
The ngrok allows you to expose a webserver running on your local machine to the internet. Just tell ngrok what port your web server is listening on.
On the free plan, ngrok’s URLs are randomly generated and temporary. If you want to use the same URL every time, you need to upgrade to a paid plan so that you can use the subdomain option for a stable URL. There are different paid plans they will provide some advance features like custom/reserved domains and multiple tunnels etc
How ngrok works
You download and run a program on your machine and provide it the port of a network service, usually a web server.
It connects to the ngrok cloud service which accepts traffic on a public address and relays that traffic through to the ngrok process running on your machine and then on to the local address you specified.
Python HTTP Server
Python standard library comes with an in-built webserver which can be invoked for simple web client server communication
The required port number can be assigned and the web server is accessed through this port
My system has python version 3.7.0 installed— “py -vi”
In the first scenario, i want to share some regular files externally
To start the HTTP server, cd to to the folder that should be shared(C:\Albin\blogData\demo\Share) through command prompt and execute the command “py -m http.server 80” — change the port number as required
Now the files are accessible through localhost
Let's now start ngrok to share this folder externally, cd to the folder where ngrok was extracted(C:\Albin\SW\ngrok-stable-windows-amd64)
Execute “ngrok.exe http 80”(80 is where python HTTP server running)
Now the external requests(http/https) are forwarded to localhost webserver through ngrok proxy domain
The local folders can be shared directly without a HTTP server through inbuilt ngrok file server. To share the local folder directly through ngrok , as a first step configure the authtoken to the ngrok
The authtoken can be retrieved through ngrok dashboard — the user should signup for a account , copy the command to set the authtoken by navigating to the dashboard.
Execute the command
Start the ngrok process — e.g ngrok http “file:///C:\Albin\blogData\demo\blogproject.blogproject
Now the files under the specific folder is accessible externally
Let us now see how to enable the second scenario, to access simple website externally, created a index.html file along with some test files into a folder(C:\Albin\blogData\demo\site), cd to the folder where the index.html and other files are located
Re-start the HTTP server, the pages are now accessible outside
This tutorial explain the approach to enable Geo Location based redirects with CloudFront and Apache.
Geo IP based redirection
Geo IP based redirection is the process of automatically redirecting a website visitor by their geolocation.
There are multiple options to enable the location based redirects in Apache, one of the option is using Geo IP database like MaxMind Geo IP database to map users’s IP to their location. Maxmind Geo IP database can be enabled through Apache module.
If you are using any of the CDN e.g CloudFront provides specific headers with request location, CloudFront will detect the user’s country of origin and pass along the county code to origin server in the CloudFront-Viewer-Country header. You can use this information to customize your responses e.g redirecting the users to specific URL based on origin country.
Prerequisites
Website enabled with CloudFront CDN and Apache
CloudFront Configurations
As a first step white list the CloudFront-Viewer-Country header in Cloudfront distribution
RewriteCond %{REQUEST_URI} ^/content/we-retail.html RewriteCond %{HTTP:CLOUDFRONT-VIEWER-COUNTRY} ^US$ RewriteRule ^.*$ https://test.albinsblog.com/content/we-retail/us/en.html [R=302,L] RewriteCond %{REQUEST_URI} ^/content/we-retail.html RewriteCond %{HTTP:CLOUDFRONT-VIEWER-COUNTRY} ^IT$ RewriteRule ^.*$ https://test.albinsblog.com/content/we-retail/it/it.html [R=302,L] RewriteCond %{REQUEST_URI} ^/content/we-retail.html RewriteCond %{HTTP:CLOUDFRONT-VIEWER-COUNTRY} ^CA RewriteRule ^.*$ https://test.albinsblog.com/content/we-retail/ca/en.html [R=302,L] RewriteCond %{REQUEST_URI} ^/content/we-retail.html RewriteCond %{HTTP:CLOUDFRONT-VIEWER-COUNTRY} ^FR$ RewriteRule ^.*$ https://test.albinsblog.com/content/we-retail/fr/fr.html [R=302,L] <Directory /> Options Indexes FollowSymLinks Includes # Set includes to process .html files AddOutputFilter INCLUDES .html AddOutputFilterByType INCLUDES text/html AllowOverride None </Directory>
</VirtualHost>
I am using some VPN tool to initiate the connection from different origin country.
Connected the VPN to Canada
Now the user is redirected to Canada specific URL
The user is redirected to the country specific URL based on the users country of origin, CloudFront will detect the user’s country of origin and pass along the county code to origin server(Apache) in the CloudFront-Viewer-Country header. The Apache server redirect the user to the country specific URL’s based on the country code values in CloudFront-Viewer-Country header.