У меня был установлен 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>