динамические поддомены с htaccess: URL не должен меняться в браузере

Пытаюсь реализовать поддомены с помощью htaccess.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} !^www.
    RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.domain.com(.*)$
    RewriteRule ^(.*)$ http://domain.com/index.php?/public_site/main/%1/$1 [L]
</IfModule>

когда я ввожу ahser.domain.com, URL-адрес браузера меняется. есть ли опция htaccess, чтобы этого не произошло, когда в RewriteRule используются абсолютные URL-адреса?


person santosh    schedule 10.03.2012    source источник
comment
Я вижу, вы правильно получаете совпадающие части из RewriteCond теперь с нотацией %. Я заметил эту проблему в вашем коде, в вопросе stackoverflow.com/questions/9632242/ . Вы использовали решение, но не приняли ответ.   -  person Kaz    schedule 10.03.2012
comment
простите. Я новый пользователь. Мне нужно как минимум 15 репутаций, чтобы принять ответ.   -  person santosh    schedule 10.03.2012


Ответы (1)


Не переписывайте полный URL-адрес с доменом в нем. Это генерирует редирект, так как он идет на другой сайт! Вы можете поставить microsoft.com туда; так как это будет работать без перенаправления?

Что вам нужно сделать, так это убедиться, что веб-страницы работают в исходном домене. Итак, когда клиент запрашивает myname.domain.com/..., как насчет того, чтобы переписать это на myname.domain.com/index.php?public_site/main/myname/.... Держите домен прежним. index.php? можно заставить работать в любой из этих областей. Например, даже это может сработать:

http://OTHER.domain.com/index.php?public_site/main/MYNAME/...

т.е. настройте его так, чтобы не имело значения, какой виртуальный хост обращается к этому пути.

Как только вы это сделаете, переписать можно просто:

# will not trigger redirect
RewriteRule ^(.*)$ /index.php?/public_site/main/%1/$1 [L]

Вы должны быть осторожны, чтобы не создать цикл, поскольку теперь вы перенаправляете URL-адрес на более длинный URL-адрес, который соответствует тому же правилу перезаписи того же домена. Вам нужен дополнительный RewriteCond, чтобы не применять это изменение, если URL-адрес уже начинается с /index.php?public_site/.

person Kaz    schedule 10.03.2012
comment
хм... ты прав. Я понимаю, почему перенаправление должно работать именно так. - person santosh; 10.03.2012
comment
хм... ты прав. Я понимаю, почему перенаправление должно работать именно так. Я хотел простые URL-адреса на стороне пользователя. поэтому, если я хочу реализовать поддомены на своем сайте, которые дают простые URL-адреса на стороне пользователя, я думаю, что делать это в php лучше, чем в htaccess. - person santosh; 10.03.2012