我将mantis设置为www.example.com/mantis,现在我已经设置了我的httpd.conf,以便在mantis.example.com上访问它。 由于我有很多链接引用早期的链接,我需要将它们redirect到新的位置。
这就是我现在使用的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]
唉…算出来的罪魁祸首
/ mantis /。中有一个.htaccess正在搞砸了…… 🙁
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
刚刚删除它,现在一切正常工作!
你有NameVirtualHost MYSERVERIP指令吗? 如果不是的话,我很确定把这条线添加到顶部将会解决你的问题。 没有它,apache只会忽略主机头,并使用它根据IPfind的第一个匹配的虚拟主机,这就是为什么它从第一个虚拟主机rewriterule重新添加www。
那么,在这里检查这个块:
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
最简单的方法是将第一行移到第四行的下面。 就那么简单。
尝试这样的,更简单。
<VirtualHost *:80> ServerAlias example.com Redirect /mantis http://mantis.example.com ... </VirtualHost> <VirtualHost *:80> ServerAlias mantis.example.com ... </VirtualHost>