2011-09-01 51 views
0

我想重定向来自我的.htaccess文件中的特定域的流量。它工作正常,除非我为具有.to扩展名的域执行此操作。任何想法发生了什么?添加RewriteCond与.to域时出现错误500

产生错误500:

RewriteCond %{HTTP_HOST}   ^(www\.)?domain\.to [NC] 
RewriteRule ^.*$     /foo/bar [L] 

正常工作:

RewriteCond %{HTTP_HOST}   ^(www\.)?domain\.com [NC] 
RewriteRule ^.*$     /foo/bar [L] 
+0

什么Apache的错误日志中说,有关这个错误? – LazyOne

+0

看起来它陷入了递归循环。 “由于可能的配置错误,请求超过了10个内部重定向的限制,如果需要,使用'LimitInternalRecursion'来增加限制,使用'LogLevel debug'来获得回溯。 –

+0

也试过:的RewriteCond%{HTTP_HOST} \t \t \t ^(WWW \)域\。要 的RewriteCond $ 1 \t \t \t \t \t \t ^(/富/条)[NC] 重写规则^ * $ \t?!。 \t \t \t \t/foo/bar [L] –

回答

1

因为我不知道肯定这条规则不会产生重写循环,我只能建议在这个时刻这个方法:

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.to [NC] 
RewriteCond %{REQUEST_URI} !^/foo/bar 
RewriteRule ^.*$ /foo/bar [L] 

由于2个原因,您的尝试在技术上不正确:

  • in .htaccess URL将不带斜杠(我指的是$1);
  • 你正在使用$1 ..但你没有匹配的组设置(换句话说$1将永远是空的)。

如果仍然一无所获 - 请提供真实的htaccess ...或者尝试启用重写调试RewriteLogLevel 9) - 但对于这个你必须有过Apache服务器的完全控制,因为这个指令不能放在.htaccess中(只有服务器配置/虚拟主机上下文)+您需要重新启动Apache才能重新读取配置文件。


尝试在上面某处添加此规则 - 在那里将是适当的:

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 
+0

这是我真正的htaccess。 #直接默认寻路方向 的RewriteCond%{HTTP_HOST} \t \t \t ^(WWW \。)?bleau \。为[NC] 的RewriteCond%{REQUEST_URI} \t \t \t!^ /服务/方向 重写规则^。* $ \t \t \t \t \t/SERVICE/directions [L] –

+0

试过打开调试级别9,并输出大量的数据。这是在一个生产环境中,所以很难看到哪些调试是我比其他流量。我需要将DNS更改为更好的测试。 –

+0

您在.htaccess中有其他重写规则吗?由于mod_rewrite在迭代中工作(发生重写时会进入下一次迭代,并从头开始再次匹配所有规则)。您可能会这样做,因为其他规则会将URL从'/ SERVICE/directions'更改为其他内容。并且在文本迭代中,它会再次被重写。它自己的这条规则不会产生重写循环。尝试添加“不重写现有文件/文件夹”规则 - 请参阅我的更新答案(1分钟或2分钟)。 – LazyOne

相关问题