Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess似乎忽略了重写条件_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache .htaccess似乎忽略了重写条件

Apache .htaccess似乎忽略了重写条件,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,这是我的访问权限: 选项+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

这是我的访问权限: 选项+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
我们应该做的很简单:

  • 从URL中删除尾部斜杠
  • 将example.com/tomato直接发送到example.com/pages/tomato.php
  • 将example.com/tomato?c=red&size=big直接发送到example.com/pages/tomato.php?c=red&size=big
  • 将example.com/tomato/red直接发送到example.com/pages/tomato.php?q=r
但这就是问题所在:for/pages/tomato.php的任何URL都匹配.htaccess的第7行,这将产生一个无限循环。这就是为什么我为/pages添加了一个异常,但它似乎被忽略了-我仍然收到了500个内部服务器错误的日志消息:

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


这可能与我在虚拟主机上运行的事实有关吗?如果是这样的话,应该采取什么措施来修复它?

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

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

RewriteRule ^pages/ - [L]

谢谢,有没有一种方法可以使它适用于以下所有规则,而不必一次又一次地复制它?谢谢。事实证明,在这种情况下,只将RewriteCond添加到另一个RewriteRule中就足够了,但我肯定会在将来记住这一点。