I am having a problem while redirecting a page whose URL was changed but I want old URL to be redirected to new. Here is .htaccess
file
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteEngine On
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
Using mod_rewrite in the last line I am not getting redirected to new URL but when I use mod_alias(Redirect) rule I get redirected to new URL but Old URL gets appended to in it in this format.
https://example.com/contact-us/?/contactus/
I have searched Stack Overflow for solution to this problem and tried many similar scenarios but that didn’t work.
2
Answers
Have it like this the given order.
RewriteEngine On
is not required multiple times in same .htaccess.Make sure to clear your browser cache before testing the change.
Your mod_rewrite external redirects (the last three rules) are in the wrong place. These need to be before the internal rewrite (front-controller). By placing them at the end of the file they are never going to get processed for any URL other than static resources, since all other URLs are routed to
index.php
, at which point processing stops.Different modules are processed independently regardless of the order of the directives in the config file. mod_alias is processed after mod_rewrite – but it is processed. However, the
Redirect
directive is prefix matching and everything after the match is appended onto the end of the target URL.And there’s no need to repeat the
RewriteEngine
directivesHave your directives like this:
And make sure to clear your browser cache before testing. Preferably test with 302 (temporary) redirect to avoid caching issues.