开发者

htaccess subdir to subdomain and subdomain to subdir redirect problem

I'm trying to accomplish the following:

http:// www.example.com/site/abc with a http 301 redirect to subdomain http:// abc.example.com and back again within Apache: http:// abc.example.com --> /site/abc

I want both redirects to be defined in the .htaccess in the root folder.

I've tried several combinations, but unfortunately without any luck. This is what I have now:

# 1. redirect uris which start with www. to the domain without www.
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.example\.开发者_运维技巧com$
RewriteRule ^(.*)$ http://%1.example.com/$1 [R=301,L]

# 2. rewrite http://host/site/<name>/<uri> => http://<name>.host/<uri>
RewriteCond %{HTTP_HOST} ^example\.com
RewriteCond %{REQUEST_URI} ^/site/([^/]+)
RewriteRule ^(.*) http://%1.example.com/$1 [R=301,NC,L]

# 3. internal redirect to the corresponding directory
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(.*)$ site/%1/ [L,NC]

I receive a 500 server error instead.

Thanks in advance!


Just to clarify in your original question you said you need this redirection:

   http://www.example.com/site/abc => http://abc.example.com/site/abc (**site/abc also present** in destination URL)

But later in your comment you suggested:

http://www.example.com/site/abc/xyz/part?id=123&name=lmn => http://abc.example.com/xyz/part?id=123&name=lmn (**site/abc missing** from destination URL)

Assuming your comment are right, please try this in your .htaccess file:

RewriteEngine On    
RewriteCond %{HTTP_HOST}   ^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule site/(.+)/(.*) http://$1.example.com/$2 [R=301,L]

This will redirect www.example.com/site/foo/bar* to foo.example.com/bar* with 301 status to the browser.


Assuming /site/abc/xyz/part is a actual physical file on disk try following (if actual file got some extension then append it). Also add QSA flag so that query string is appended.

# 1. redirect uris which start with www. to the domain without www.
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.example\.com$
RewriteRule ^(.*)$ http://%1.example.com/$1 [R=301,L,QSA]

# 2. rewrite http://host/site/<name>/<uri> => http://<name>.host/<uri>
RewriteCond %{HTTP_HOST} ^example\.com
RewriteCond %{REQUEST_URI} ^/site/([^/]+)
RewriteRule ^(.*) http://%1.example.com/$1 [R=301,NC,L,QSA]

# 3. internal redirect to the corresponding directory
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(.*)$ site/%1/ [L,NC,QSA]
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜