Я хочу хранить свой блог во вложенной папке domain_com/htdocs/blog
и получить к нему доступ с помощью blog.domain.com. Я могу получить его с помощью apache mod_rewrite:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog\.domain\.com
RewriteCond %{HTTP_HOST} !^/blog
RewriteRule ^(.*)$ /blog/$1 [L]
Но я также хочу перенаправить hxxp: //domain.com/blog на hxxp: //blog.domain.com (просто потому, что я хочу скрыть его от пользователей). Простое перенаправление вроде:
RewriteCond %{HTTP_HOST} ^wojtyniak\.com$
RewriteRule %{REQUEST_URI} ^/foo
RewriteRule ^(.*)$ http://foo.wojtyniak.com [L,R=301]
вызывает петлю перенаправления. Есть ли способ сделать такое перенаправление без цикла? Большое спасибо!
PS. Извините за эти hxxp, но serverfault считает, что это ссылка, и не позволяет мне публиковать больше одной.
Да, я знаю. Спустя 2 года это здесь больше никому не понадобится. Но может быть тот, кого сюда перенаправляет гугл.
# Rewrite <subdomain>.example.com/<path> to example.com/<subdomain>/<path>
#
# Skip rewrite if no hostname or if subdomain is www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
# Extract (required) subdomain (%1), and first path element (%3), discard port number if present (%2)
RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.example\.com(:80)?<>/([^/]*) [NC]
# Rewrite only when subdomain not equal to first path element (prevents mod_rewrite recursion)
RewriteCond %1<>%3 !^(.*)<>\1$ [NC]
# Rewrite to /subdomain/path
RewriteRule ^(.*) /%1/$1 [L]
# Я нашел это здесь http://www.webmasterworld.com/forum92/1310.htm
Самым идеальным решением было бы разместить это на виртуальном хосте с файлами блога, размещенными где-то за пределами вашего каталога htdocs.
Я предполагаю, что у вас не будет доступа для внесения этих необходимых изменений, но если вы это сделаете, вот документация для этого.