Почему перезапись поддоменов не работает?

Я хочу, чтобы мой поддомен указывал прямо на папку. Я нашел следующий скрипт mod_rewrite, чтобы настроить это поведение. К сожалению, это не работает.

Когда я перехожу на fish.example.com, браузер отображает ошибку 404 со следующим сообщением. "Запрошенный URL / не найден на этом сервере."

Ты знаешь почему? Как я могу заставить это работать?

    # Internally rewrite <subdomain>.example.com/<URLpath> to example.com/subs/<subdomain/<URLpath>
RewriteEngine on

RewriteCond $1 !^fish/
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /fish/%1/$1 [L]

ОБНОВИТЬ

Я изменил сценарий на следующий, но в этом случае браузер перенаправляет на example.com вместо example.com/fish. Знаете ли вы, почему?

RewriteCond $1 !^fish/
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule ^fish/(.*) /fish/%1/$1 [L]
13.10.2009 04:52:52
Предоставляют ли журналы доступа / ошибок Apache какую-либо полезную информацию?
MichaelM 13.10.2009 04:54:36
Да, Майкл, спасибо за совет. Я вижу следующее сообщение [Вт окт 13 09:21:05 2009] [ошибка] [клиент 188.134.xxx.xxx] Файл не существует: / var / www / fish / fish Похоже, что каталог добавляется 2 раза. Но я понятия не имею, почему.
Pavel 13.10.2009 05:24:48
Gumbo 13.10.2009 06:39:32
2 ОТВЕТА

Попробуй это:

RewriteEngine On

Перезаписать базу / # Убедитесь, что она начинается с домена

RewriteCond% {HTTP_HOST} ^ fish.example.com [NC] # Поймайте свой поддомен

RewriteRule (. *) $ Fish / $ 1 [L] # Перенаправить в папку.

0
13.10.2009 04:59:15
Спасибо, Брент! К сожалению, это не работает. Apache говорит, что в строке RewriteBase есть синтаксическая ошибка. RewriteBase / # Убедитесь, что он начинается с домена. Да, я пишу без пробела между Rewrite и Base, но это не помогает. Все еще есть ошибка.
Pavel 13.10.2009 05:26:21

Обновить:

Я вижу ... попробуйте это:

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

По сути, перенаправление 301 ...% 1 соответствует поддомену в предыдущем RewriteCond, а $ 1 соответствует исходному URL

0
14.10.2009 13:27:58
Джон, я изменил сценарий так, как ты предлагаешь, но в этом случае браузер перенаправляет на example.com вместо example.com/fish. См. Полный сценарий в моем обновлении темы.
Pavel 13.10.2009 06:35:05