Hi Team,
I have a requirement where I need to redirect old domain URLs to new domain.
Old URL patteren: https://live.test.com/%23document%2F1533623%3Fpref%3D20058%2F9%2F5%26crumb%3D104
When user access above link then I need to redirect above old URL to new URL mentioned below
New URL: https://prod.test.net/document?page=1533623&id=58
Note:
Could you please share apache mod rewrite rules for this requirement?
@kautuk_sahni @aanchal-sikka @lukasz-m
Thanks.
Topics help categorize Community content and increase your ability to discover relevant content.
Views
Replies
Total Likes
Hi,
I encourage you to learn and experiment with rewrite rules on your own in a local environment. You have some resources where you can learn more about this topic:
As part of what you are looking for, you can try something like the example below (which I have not tested but it may work):
# Rule to match the old URL pattern and redirect to the new URL
RewriteCond %{HTTP_HOST} ^live\.test\.com$ [NC]
RewriteCond %{QUERY_STRING} ^pref=(\d+)/(\d+)/(\d+)&crumb=(\d+)$
RewriteRule ^%23document/(\d+)$ https://prod.test.net/document?page=%1&id=%4 [R=301,L]
Explanation:
RewriteCond %{HTTP_HOST} ^live\.test\.com$ [NC]
: This condition checks if the request is coming to the old domain.
RewriteCond %{QUERY_STRING} ^pref=(\d+)/(\d+)/(\d+)&crumb=(\d+)$
: This condition captures the values you need from the old query string.
RewriteRule ^%23document/(\d+)$ https://prod.test.net/document?page=%1&id=%4 [R=301,L]
: This rule matches the old URL pattern and redirects to the new URL with the captured values.
%1
refers to the first captured group in the last RewriteCond
, which is the value for the pref
parameter (20058).%4
refers to the fourth captured group, which is the value for the crumb
parameter (104).(\d+)
captures the numeric value in the old URL, which is used as the value for the page
parameter in the new URL.The [R=301,L]
flag indicates a permanent (301) redirect and that this is the last rule to be applied.
Hope this helps.
you should need to do however is include this in the .htaccess of your old domain:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://new-domain.com/$1 [R=301,L]
For specific directories:
Redirect 301 /mydir http://www.new-domain.com
or if it is to go to another directory:
Redirect 301 /mydir http://www.new-domain.com/mydir
set of mod_rewrite rules for your requirement:
apache
Copy code
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Check if the request is for the old domain and URL pattern
RewriteCond %{HTTP_HOST} ^live\.test\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/[^?]*%23document%2F(\d+)%3Fpref%3D(\d+)%2F(\d+)%2F(\d+)%26crumb%3D(\d+)$
# Redirect to the new domain and URL
RewriteRule ^ https://prod.test.net/document?page=%1&id=%4 [R=301,L]
</IfModule>
Explanation of the rules:
The RewriteCond directives check if the request is coming from the old domain and matches the specified old URL pattern.
The regular expression in RewriteCond extracts the necessary values from the old URL.
The RewriteRule then performs the redirection to the new domain and constructs the new URL with the extracted values.
Make sure to place these rules in your Apache configuration file or in the .htaccess file in the document root of your old domain.
Note: The %1, %4, etc., in the RewriteRule pattern refer to the back-references from the RewriteCond regular expression. The values extracted from the old URL are used in constructing the new URL. The R=301 flag indicates a permanent.
@Uppari_Ramesh Did you find the suggestions from users helpful? Please let us know if more information is required. Otherwise, please mark the answer as correct for posterity. If you have found out solution yourself, please share it with the community.
Views
Replies
Total Likes
Hi @EstebanBustamante @Raja_Reddy , @kautuk_sahni
I am following your suggestions and I had to modify the rules a bit according to my requirement. Below is the updated configuration
RewriteCond %{HTTP_HOST} ^live\.test\.com$ [NC]
RewriteMap map1 "txt:conf/rewritemaps/subtractionMap.txt"
RewriteMap map2 "txt:conf/rewritemaps/idMap.txt"
RewriteCond "%{QUERY_STRING}" "^pref=(\d+)/(\d+)/(\d+)&crumb=(\d+)$"
RewriteRule "^/#document/(\d+)" "https://prod.test.net/document?page=$1&id=${map1:%1}${map2:%2}" [R=301,L]
Explanation: I want to convert 20058 to 58 hence I have created a RewriteMap and given a identifier as map1. Also I need to convert %2 variable into text so I have created map2.
Also if I write RewriteRule as ^/%23document it is not working instead we should use as ^/#document. It seems apache auto decodes encoded URL.
If I hit the resource as /%23document/1533623?pref=20058/9/5&crumb=104 then only my rewrite rule is working.[only # encoded]
If I hit the resource as %23document%2F1533623%3Fpref%3D20058%2F9%2F5%26crumb%3D104
my rewrite is not working[[full encoding]] @EstebanBustamante you have any idea on this?
Thanks.
RewriteCond %{HTTP_HOST} ^live\.test\.com$ [NC]
RewriteMap map1 "txt:conf/rewritemaps/subtractionMap.txt"
RewriteMap map2 "txt:conf/rewritemaps/idMap.txt"
RewriteCond "%{QUERY_STRING}" "^pref=(\d+)\/(\d+)\/(\d+)&crumb=(\d+)$"
RewriteRule "^/#document/(\d+)" "https://prod.test.net/document?page=$1&id=${map1:%1}${map2:%2}" [R=301,L]
or
You can try
RewriteRule "^/#document/(\d+)" "https://prod.test.net/document?page=$1&id=${map1:%1}${map2:%2}" [R=301,L,NE]
Views
Likes
Replies