htaccess subdir к поддомену и субдомен к проблеме перенаправления subdir - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь выполнить следующее:

http: // www.example.com/site/abc с перенаправлением http 301 на поддомен http: // abc.example.com и обратнов Apache: http: // abc.example.com -> / site / abc

Я хочу, чтобы оба перенаправления были определены в .htaccess в корневой папке.

Я пробовал несколько комбинаций, но, к сожалению, безуспешно.Вот что у меня сейчас:

# 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]

Вместо этого я получаю ошибку сервера 500.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Предполагая, что /site/abc/xyz/part - это реальный физический файл на диске, попробуйте выполнить следующее (если фактический файл получил какое-либо расширение, добавьте его).Также добавьте флаг QSA, чтобы к нему добавлялась строка запроса.

# 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 голосов
/ 17 марта 2011

Просто для уточнения в исходном вопросе вы сказали, что вам нужно это перенаправление:

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

Но позже в своем комментарии вы предложили:

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)

Предполагая, что ваш комментарий прав, пожалуйста,попробуйте это в вашем файле .htaccess:

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

Это перенаправит www.example.com/site/foo/bar* в foo.example.com/bar* со статусом 301 в браузер.

...