19

I have two subdomains, a.website.com and b.website.com, pointing to the same IP address. I want to redirect b.website.com to a.website.com:8080. I have this in my .htaccess file...

RewriteEngine on
RewriteCond {HTTP_HOST} b\.website\.com
RewriteRule ^(.*)$ http://b.website.com:8080$1 [L]

...but it does not work.

Is there a way to make it work?

Technius
  • 193
  • 1
  • 1
  • 5
  • Try adding the following to `.htaccess` in the parent directory above the directory of interest: `RedirectMatch ^/foo/$ /foo/bar/` or `RedirectMatch ^/foo/$ /bar/baz/`. Also see [How to get apache2 to redirect to a subdirectory](http://serverfault.com/q/9992/145545). – jww Nov 06 '16 at 08:27

2 Answers2

27

You could always use a simple VirtualHost:

<VirtualHost *:80>
  ServerName b.website.com
  RedirectPermanent / http://a.website.com:8080/
</VirtualHost>

If you prefer to go with the .htaccess file, you're just missing a % sign on the Rewrite Condition:

RewriteEngine on
RewriteCond %{HTTP_HOST} b.website.com
RewriteRule ^(.*)$ http://a.website.com:8080$1 [L]
mattw
  • 691
  • 7
  • 7
  • I tried both and they didn't work. I have mod_rewrite enabled and I have the VirtualHost in a separate site file. Is there anything that I'm missing? – Technius May 21 '13 at 05:16
  • 3
    This works fine. I had a loop redirect problem, because I was pointing a subdomain to a subfolder, and that subfolder was redirecting. Now, I redirect the subdomain to the URL that corresponds to the folder, and the 2nd redirection happens just fine! – Paschalis Jul 12 '14 at 09:29
  • How to do ot to preserve `http://` or `https://`, whatever way `b.website.com` was accessed in the first place? – Golar Ramblar Jun 02 '18 at 08:27
0

Complementing the main answer

Redirect type

You can explicitly specify the type of redirect you pretend.
I suggest you use a temporary redirect (302) while testing the redirection rule.

# In a VirtualHost file
...
Redirect [301|302] /old_location http://new_domain/newlocation


# In a .httaccess file
...
RewriteRule ^(.*)$ http://new_domain/$1 [R=302,L]

Specify directory matching patterns

You could only redirect requests that match some pattern.

# In a VirtualHost file
...
RedirectMatch [301|302] ^/public/(.*)$ http://public.example.com/$1


# In a .httaccess file
...
RewriteRule ^/public/(.*)$ http://public.example.com/$1 [R=302,L]
ePi272314
  • 281
  • 1
  • 3
  • 9