Редиректы и домены.

Flyer

Новичок
Здравствуйте.
Напоролся на не понятную мне ситуацию.

Есть 2 домена.
Основной: domain.com
Alias: domain.net

Находясь на domain.net, выполняю переадресацию на другую страницу этого же домена:
PHP:
$url="/members"
header("Location: http://".$_SERVER["HTTP_HOST"].$url);
В результате я оказываюсь на основном домене http://domain.COM/members, а не http://domain.NET/members как мне нужно.

Для проверки что реально содержится в переменных, сделал так:
PHP:
$url="/members"
echo ("Location: http://".$_SERVER["HTTP_HOST"].$url);
// Результат: Location: http://domain.net/members
В то же время:
PHP:
header("Location: http://".$_SERVER["HTTP_HOST"]);
// Перекидывает на нужный мне домен

И никак не могу понять почему так происходит.

Заранее спасибо!
 

baev

‹°°¬•
Команда форума
Если Вы уже «находясь на domain.net», зачем нужен «$_SERVER["HTTP_HOST"]»?
 

Flyer

Новичок
Хм, посмотрел запросы. Все верно передается, НО заметил следующую ерундовину.

Если даже просто захожу по ссылке:
domain.ru/members - открывается domain.COM/members/
Если
domain.ru/members/ - открывается все верно domain.RU/members/

Т.е. если нет слеша то по файрбагу вижу редирект сразу на ком. Верно ли я понимаю что нужно мучать хостера, или я чего то не догоняю в другом?
 

Vin-Diesel

Новичок
.htaccess? rewrite?

и зачем вам:
PHP:
$url="/members"
header("Location: http://".$_SERVER["HTTP_HOST"].$url);
делайте так:
PHP:
$url="/members"
header("Location: /".$url);
 

fixxxer

К.О.
Партнер клуба
.htaccess? rewrite?

и зачем вам:
PHP:
$url="/members"
header("Location: http://".$_SERVER["HTTP_HOST"].$url);
делайте так:
PHP:
$url="/members"
header("Location: /".$url);
Нет, так делать нельзя.

http://www.ietf.org/rfc/rfc2616.txt

14.30 Location

The Location response-header field is used to redirect the recipient
to a location other than the Request-URI for completion of the
request or identification of a new resource. For 201 (Created)
responses, the Location is that of the new resource which was created
by the request. For 3xx responses, the location SHOULD indicate the
server's preferred URI for automatic redirection to the resource. The
field value consists of a single absolute URI
.

Location = "Location" ":" absoluteURI

An example is:

Location: http://www.w3.org/pub/WWW/People.html
 

Flyer

Новичок
.htaccess

php_flag display_errors on
php_flag magic_quotes_gpc Off
php_flag register_globals Off
php_flag session.use_cookies on
php_flag session.use_trans_sid off
php_value default_charset "utf-8"

Options -Indexes

RewriteEngine On

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

RewriteRule ^$ /index.html [L,QSA]
RewriteRule ^(images/|uploads/|js/) - [L]
RewriteRule ^([a-zA-Z0-9_/\-%\ ]*)/$ /$1/index.html [QSA]
RewriteRule ^([a-zA-Z0-9_/\-%\ ]+)/{0}$ /$1/ [R,L,QSA]
RewriteRule ^([a-zA-Z0-9_/\-%\ ]+)/{0}\.(html|php|js)$ index.php?mods=$1&ext=$2 [L,QSA]


ErrorDocument 404 /page_not_found.html

Зачем делал с HTTP_HOST описал выше, уже вернулся к первоначальному варианту, как вы описали.
 

fixxxer

К.О.
Партнер клуба
Хм, посмотрел запросы. Все верно передается, НО заметил следующую ерундовину.

Если даже просто захожу по ссылке:
domain.ru/members - открывается domain.COM/members/
Если
domain.ru/members/ - открывается все верно domain.RU/members/

Т.е. если нет слеша то по файрбагу вижу редирект сразу на ком. Верно ли я понимаю что нужно мучать хостера, или я чего то не догоняю в другом?
Очевидна следующую конфигурацию веб-сервера

ServerName domain.com
ServerAlias domain.ru
UseCanonicalName On

(или аналогично с nginx и server_name_in_redirect).

Соответственно, этот момент и надо исправить.
 

С.

Продвинутый новичок
Мало ли что где работает. Сегодня работает, завтра перестанет =)
Мне лично не понятна логика запрета относительного адреса. Неоднозначности же нет. Похоже все браузеры с этим согласны и не верится, что в будущем они это вдруг перестанум понимать. Более вероятно, что завтра спецификация изменится.
 

fixxxer

К.О.
Партнер клуба
Вот когда спецификация изменится, тогда и можно будет опускать имя хоста.

Вообще в любом случае это не должно вызывать проблем у нормальных людей, которые все пишут что-то вида $Response->redirect() а не header() die(). :)
 

fixxxer

К.О.
Партнер клуба
Вряд ли. Но это изначально некорректная настройка в подавляющем большинстве случаев. И то, что она установлена в On, говорит в основном о квалификации (или лени) сисадмина: On, насколько я помню, в примере конфигурации, устанавливаемом по умолчанию. По крайней мере, лет 7 назад так было :)
 

Flyer

Новичок
Вряд ли. Но это изначально некорректная настройка в подавляющем большинстве случаев. И то, что она установлена в On, говорит в основном о квалификации (или лени) сисадмина: On, насколько я помню, в примере конфигурации, устанавливаемом по умолчанию. По крайней мере, лет 7 назад так было :)
Понял, спасибо большое! Пойду хостера пытать...
 

Flyer

Новичок
fixxxer
Да, так и оказалось. Кому интересно, хостер предложил лечить так:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !^domain2.tld$
RewriteRule ^(.+[^/])$ http://domain2.tld/$1/ [R]
 

fixxxer

К.О.
Партнер клуба
Админ хостера раньше в области проктологии не работал?
 

damner2

Новичок
Flyer
на мастерхосте ваще целая куча неудобств на дешёвых тарифах:
cron не чаще, чем раз в час;
нет innodb;
установлены disable_functions;
 
Сверху