Поддомены с подстановочными знаками .htaccess

Я пытаюсь реализовать решение, используя поддомены .htaccess и подстановочные знаки, чтобы

http://subdomain.example.com сопоставляется с http://example.com/index.php/accounts/subdomain/. Мои правила выглядят примерно так:

RewriteCond %{HTTP_HOST} !www.example.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC]
RewriteRule ^(.*/) /index.php [PT,L]

Который работает, но игнорирует все остальное. Когда я пытаюсь добавить что-либо к правилу, например:

RewriteRule ^(.*/) /index.php/hello [PT,L]

Я получаю внутреннюю ошибку сервера 500. Как мне заставить это работать?


person Zahymaka    schedule 29.06.2009    source источник


Ответы (3)


Вероятно, вам нужно исключить index.php из вашего правила:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com$ [NC]
RewriteRule !^index\.php($|/) index.php/accounts/%2%{REQUEST_URI} [PT,L]
person Gumbo    schedule 29.06.2009
comment
Спасибо, я использовал что-то другое (-f и -d), но это тоже работает, поэтому я собираюсь сохранить его для дальнейшего использования. - person Zahymaka; 30.06.2009

Это адаптация кода, который я использую для перенаправления субдоменов на моем собственном сайте. Я не претендую на то, что это лучшая практика, но она работает;

RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC]
RewriteCond %1 !^(www)\.example$ [NC]
RewriteRule ^.*$ http://www.example.com/index.php/accounts/%1/ [R=301,L]
person Mathew    schedule 29.06.2009
comment
Это работает, но я не хочу перенаправлять пользователей на сайт. Все равно спасибо. - person Zahymaka; 29.06.2009
comment
Я не в состоянии проверить это прямо сейчас, но не будет ли это работать точно так же, если заменить [R=301,L] на [PT,L]? - person Mathew; 29.06.2009

Попробуйте изменить RewriteRule на

RewriteRule ^/(.*)$ /index.php/accounts/%1/$1 [PT]

Это изменит URL-адрес на тот, который включает поддомен и исходный URI запроса.

EDIT: может быть, это нужно

RewriteRule ^(.*)$ /index.php/accounts/%1/$1 [PT]

как упоминалось в комментариях.

person David Z    schedule 29.06.2009
comment
Я пробовал это, но, похоже, он не срабатывает, даже когда я меняю index.php на что-то другое. - person Zahymaka; 29.06.2009
comment
О... возможно, вам нужно использовать шаблон ^(.*)$ (без косой черты), когда он находится в .htaccess. (Что бы это ни стоило, я бы рекомендовал поместить эти директивы в основной файл конфигурации сервера, если вы можете.) - person David Z; 29.06.2009
comment
Смотри ниже. Спасибо за помощь! - person Zahymaka; 30.06.2009