https://example.com/index.php/news/item/some-news
There is no query string in either of the example URLs you've posted, so trying to match against the QUERY_STRING
server variable will certainly fail. You are also trying to match against an empty URL-path (ie. ^$
) - so this will fail from the get-go. The part of the URL you are trying to match is seemingly additional pathname information (aka "path info"). In other words, the additional URL-path after an existing filename.
Curiously, however, you are seemingly trying to redirect to a query string in your RewriteRule
directive? You are also redirecting to HTTP
(from HTTPS
) - is that intentional?
On Apache you can either examine the PATH_INFO
server variable or simply match as part of the normal URL-path using the RewriteRule
pattern. So either of the following should work:
RewriteCond %{HTTP_HOST} =example.com [NC]
RewriteCond %{PATH_INFO} ^/news/item/
RewriteRule ^index\.php http://new.example.com%{REQUEST_URI} [R=302,L]
OR,
RewriteCond %{HTTP_HOST} =example.com [NC]
RewriteRule ^index\.php/news/item/ http://new.example.com%{REQUEST_URI} [R=302,L]
As per your directive, the condition of this redirect is simply that it matches /index.php/news/item/<anything>
. And redirects to the same URL-path on the target domain.
This is a 302 (temporary) redirect. Only change this to a 301 (permanent) redirect after you have confirmed that it works OK. This is to avoid the browser caching erroneous redirects whilst testing.
You will need to clear your browser cache before testing.