Назад | Перейти на главную страницу

Перенаправление с www.example.com/folder на folder.example.com

У меня был установлен mantis как www.example.com/mantis, и теперь я настроил свой httpd.conf, чтобы он был доступен по адресу: mantis.example.com. Поскольку у меня есть много ссылок, ссылающихся на более ранние ссылки, мне нужно перенаправить их в новое место.

Вот что у меня сейчас как httpd.conf:

<VirtualHost MYSERVERIP:80>
    ServerAlias EXAMPLE.com
    DocumentRoot /var/www/html/beta
    ServerName EXAMPLE.com
    UseCanonicalName On

 <IfModule mod_rewrite.c>
    RewriteEngine On

RewriteLogLevel 5
RewriteLog "/var/www/html/htaccess.log"

RewriteRule ^/mantis/(.*) http://mantis.EXAMPLE.com/$1 [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
...
 </IfModule>
</VirtualHost>

...

<VirtualHost MYSERVERIP:80>
    ServerAlias mantis.EXAMPLE.com
    DocumentRoot /var/www/html/mantis
    ServerName mantis.EXAMPLE.com
    UseCanonicalName On
</VirtualHost>

Однако доступ к http://www.EXAMPLE.com/mantis/view.php?id=17575 приводит к:

http://guide.opendns.com/main?url=www.mantis.EXAMPLE.com%2Fview.php%3Fid%3D17575 

который показывает:

You tried to visit www.mantis.EXAMPLE.com, which is not loading.

Обратите внимание на www. часть. Я не понимаю, откуда это !!

Журналы htaccess следующие:

MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (2) init rewrite engine with requested uri /mantis/view.php
MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (3) applying pattern '^/mantis/(.*)' to uri '/mantis/view.php'
MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (2) rewrite '/mantis/view.php' -> 'http://mantis.EXAMPLE.com/view.php'
MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (2) explicitly forcing redirect with http://mantis.EXAMPLE.com/view.php
MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (1) escaping http://mantis.EXAMPLE.com/view.php for redirect
MYCLIENTIP - - [27/May/2011:09:40:57 +0000] [EXAMPLE.com/sid#2b4fab862578][rid#2b4fabeec150/initial] (1) redirect to http://mantis.EXAMPLE.com/view.php?id=17575 [REDIRECT/301]

Связанный: httpd.conf, чтобы разрешить www.mysite.com и www.mysite.com/mantis и phpmyadmin?


Редактировать 1

После изменения httpd.conf на:

RewriteLogLevel 5
RewriteLog "/var/www/html/htaccess.log"

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^/mantis/(.*) http://mantis.EXAMPLE.com/$1 [L,R=301]

Все равно не повезло.

Файл журнала выглядит следующим образом:

MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (2) init rewrite engine with requested uri /mantis/view.php
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (3) applying pattern '^' to uri '/mantis/view.php'
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (4) RewriteCond: input='www.EXAMPLE.com' pattern='!^www\.' => not-matched
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (3) applying pattern '^/mantis/(.*)' to uri '/mantis/view.php'
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (2) rewrite '/mantis/view.php' -> 'http://mantis.EXAMPLE.com/view.php'
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (2) explicitly forcing redirect with http://mantis.EXAMPLE.com/view.php
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (1) escaping http://mantis.EXAMPLE.com/view.php for redirect
MYCLIENTIP - - [27/May/2011:10:41:12 +0000] [EXAMPLE.com/sid#2b4fab856518][rid#2b4fabf06640/initial] (1) redirect to http://mantis.EXAMPLE.com/view.php?id=17575 [REDIRECT/301]

Вздох ... выяснил виновника ...

Был .htaccess в / mantis /, который все испортил ... :(

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Просто удалил его, и теперь все работает нормально!

Итак, рассмотрите этот блок здесь:

RewriteRule ^/mantis/(.*) http://mantis.EXAMPLE.com/$1 [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Первая строка верна.

Второй получает HTTP_HOST, который теперь mantis.EXAMPLE.com.

Затем четвертая строка переписывает его на www.mantis.EXAMPLE.com.

Самый простой способ исправить это - переместить первую строку под четвертую. Просто как тот.

У вас есть NameVirtualHost MYSERVERIP директива там? Если нет, я почти уверен, что добавление этой строки вверх решит вашу проблему. Без него apache просто игнорирует заголовок хоста и использует первый соответствующий виртуальный хост, который он находит на основе IP, поэтому он повторно добавляет www из первого перезаписываемого vhost.

Попробуйте что-нибудь подобное, более простое.

<VirtualHost *:80>
    ServerAlias example.com

    Redirect /mantis http://mantis.example.com

    ...
</VirtualHost>

<VirtualHost *:80>
    ServerAlias mantis.example.com

    ...
</VirtualHost>