To redirect everyone else, apart from your IP address (eg. 123.123.123.123
), to the /blog
subdirectory then you can use something like the following in .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REMOTE_ADDR} !=123.123.123.123
RewriteRule (.*) /blog/$1 [R=301,L]
If the requested URI does not start with /blog/
and the IP address is not 123.123.123.123
then redirect to include /blog/
at the start.
The $1
in the RewriteRule
substitution is a backreference to the parenthesised pattern (.*)
in the RewriteRule
pattern (ie. the entire URL less the slash prefix - in htaccess).
Note also that I've removed the ?
at the end of the RewriteRule
substitution. This specifically removes any query string from the request. Unless that is required, it should be omitted.
I don't see any reason to test against %{HTTP_HOST}
(as in your original example). (?)
My initial answer (below) is not what you require, but I'll leave it for completeness.
This version internally rewrites (as opposed to redirecting) all requests to the /blog
subdirectory (the URL in the address bar does not change).
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule (.*) /blog/$1 [L]
This basically says... if the requested URI does not start with /blog/
then rewrite to include /blog/
at the start. Note the absence of the R
flag on the RewriteRule
directive. The R
flag would result in an external redirect.
/blog/
? The URL in the address bar should show/blog/
?