Both are a small instruction in a .htaccess file, although what they do are dangerously similar, it is not the same to do a Redirect than a ReWrite. Let’s see the difference, so we know when to use one or the other.
As I said, both are written in the .htaccess file. Any request made to the server goes through this file. That means that every time we load a page, it goes through this file several times; to read the HTML, for each stylesheet, for each .js, and even for each image.
So, every time we enter a URL in the browser, it passes through the RewriteRules filters we have in the -htaccess. If it “fits” the rules we have set, the server “transforms” the URL. That doesn’t mean it redirects it to another page, it simply transforms it to another URL. In case you want to do that, you have to incorporate the [R] flag. But then… what makes it different from a Redirect?
Redirect 301 is a way of telling Google that this page has moved forever. That it is no longer there, that it will now always be somewhere else, that this change will be permanent, and that from now on it is best to always go directly to the new address.
On the other hand, in the case of doing it with a ReWrite, we are simply “making up” the URL, so that it is prettier and better indexed by search engines. In other words, instead of something like “https://seoisdead.club/?p=423” the URL should be “https://seoisdead.club/link-building“. Much more descriptive than a parameter “p” assigning an autonumeric code.
So, we’ll use Redirect when we’ve simply changed our site content, and we’ll use ReWrite when we want to make up the URL. The use of ReWrite as a redirect (adding the [R]) would only apply in cases where we want to apply certain special ReWriteRules, because if it is simply a redirect, there is no need to use it.