2010-07-18 137 views
2

这是htaccess的我: 选项+的FollowSymLinks的.htaccess似乎被忽略的RewriteCond

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/pages 
RewriteRule ^(.+)/$ /$1 [NC] 
RewriteRule ^$ /pages/index.php [NC] 
RewriteRule ^([a-z]+)\?([^/]+)$ /pages/$1.php?$2 [NC] 
RewriteRule ^([a-z]+)/([^/]+)$ /pages/$1.php?q=$2 [NC] 
RewriteRule ^([a-z]+)$ /pages/$1.php [NC] 
ErrorDocument 404 /pages/404.php 

什么是应该做的是很简单:从URL

  • 删除斜线
  • direct example.com/tomato to example.com/pages/tomato.php
  • direct example.com/tomato?c=red & size = big to example.com/pages/ ?tomato.php C =红色&大小=大
  • 直接example.com/tomato/red到example.com/pages/tomato.php?q=r

但是这就是问题所在:任何URL for /pages/tomato.php匹配.htaccess的第7行,这会产生无限循环。这就是为什么我添加/页的例外,但它似乎被忽略 - 我仍然得到这个日志消息500内部服务器错误:

mod_rewrite的:达到内部重定向的最大数量。假设配置错误。如果需要,使用'RewriteOptions MaxRedirects'来增加限制。

这可能与我与虚拟主机一起运行这个事实有关吗?如果是这样,应该做些什么来解决它?

回答

4

RewriteCond仅适用于下一个RewriteRule,因此您必须为每个规则复制该条件。

+0

谢谢,是有办法,使其适用于所有以下规则没有一次又一次地复制吗? – jorenl 2010-07-18 21:43:44

0

你可以在你的其他规则前用破规则:

RewriteRule ^pages/ - [L] 
+0

谢谢。事实证明,在这种情况下,仅将RewriteCond添加到另一个RewriteRule就足够了,但我一定会记住这一点。 – jorenl 2010-07-20 21:19:42