为什么这个htaccess会在重定向循环中结束?

时间:2014-04-02 14:48:37

标签: apache .htaccess redirect

我得到了以下htaccess,最终会出现在重定向循环中:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/int(.*)$
RewriteRule ^(.*)$ /int [R,L]

RewriteRule . index.php [L]

我添加了第一条将根请求重定向到特定子文件夹的规则。 第二条规则来自WordPress(以及其他)

我不明白为什么这应该在重定向循环中结束。 第二次重写会触发另一个请求,以便再次检查htaccess吗? Thant会解释这个循环。

谢谢

2 个答案:

答案 0 :(得分:2)

每次重写都会创建一个新请求,通过.htaccess重新处理。 您正在重写任何不以/int(.*)/int开头的内容。但是,以/int开头的任何内容都会跳过第一次重写条件并被重写为index.php。然后,index.php会重写为/int,因为它不会以/int(.*)开头。然后/int被重写为index.php ......以及......和...

BTW:您可以通过添加第二次重写条件来阻止无限循环,以便在REQUEST_URI/index.php

时不触发您的第一次重写规则
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_URI} !^/int(.*)$
RewriteRule ^(.*)$ /int [R,L]

如果忘记你是否需要在第一次重写条件中使用前导斜线...请尝试两种方式。

答案 1 :(得分:0)

您告诉任何不在/int文件夹中的页面是重定向/int文件夹,但是下一行是您要将所有页面重定向到{{1页面。 所以第一条规则说:

index.php将被重定向到 - > http:example.com/about.php
但是第二条规则说
http:example.com/int将被重定向 - >到http:example.com/int
然后第一条规则重新开始并再次轮回