Работа с не жестко заданными доменными именами с помощью mod_rewrite - PullRequest
0 голосов
/ 11 января 2010

Я переношу свое приложение, предоставляющее дочерний сайт для каждого пользователя, с domain.com/~user на user.domain.com. Чтобы сделать это, я написал следующее RewriteRule:

RewriteRule ^~([a-z_]+)(/.*)?$ http://$1.%{HTTP_HOST}$2 [R=301,QSA,NC]

Однако, %{HTTP_HOST} не делает то, что мне нужно, потому что, если, например, пользователь переходит на www.domain.com/~user, он перенаправляется на user.www.domain.com, что явно не то, что я ищу.

Я знаю, что могу заменить %{HTTP_HOST} на жестко закодированный домен, но я тоже не хочу этого делать, потому что я буду внедрять изменения на нескольких доменах и не хочу настраивать его для каждый. Есть ли лучший способ сделать единственное изменение без жесткого кодирования? (Более того, что если базовый домен уже имеет поддомен - т.е. sub.domain.com/~user -> user.sub.domain.com)

1 Ответ

1 голос
/ 11 января 2010

Попробуйте с этим дополнительным RewriteCond:

RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteRule ^~([a-z_]+)(/.*)?$ http://$1.%2$2 [R=301,QSA,NC]

Это удалит префикс www. с хоста, если он присутствует.

...