.htaccess似乎忽略了RewriteCond

时间:2010-07-18 21:40:14

标签: apache .htaccess mod-rewrite

这是我拥有的htaccess: 选项+ FollowSymlinks

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

应该做的很简单:

  • 从网址中删除尾部斜杠
  • 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=red&size=big
  • direct example.com/tomato/red to example.com/pages/tomato.php?q=r

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

  

mod_rewrite:达到的最大内部重定向数。假设配置错误。如有必要,请使用“RewriteOptions MaxRedirects”增加限制。

这是否与我使用虚拟主机运行此事实有关?如果是这样,应该采取什么措施来解决它?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

您可以在其他规则前使用中断规则:

RewriteRule ^pages/ - [L]