【问题标题】:Why does this htaccess end in a redirection loop?为什么这个 htaccess 在重定向循环中结束?
【发布时间】:2014-04-02 14:48:37
【问题描述】:

我得到了以下以重定向循环结束的 htaccess:

RewriteEngine On

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

RewriteRule . index.php [L]

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

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

谢谢

【问题讨论】:

    标签: apache .htaccess redirect


    【解决方案1】:

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

    顺便说一句:当REQUEST_URI/index.php 时,您可以通过添加第二个重写条件以不触发您的第一个重写规则来防止无限循环

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

    如果忘记在第一个重写条件中是否需要前导正斜杠...尝试两种方式。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我想我是在告诉它由 index.php 页面“处理”,而不是重定向。我不知道重写后htaccess会被解析
      • handled by the index.php 页面是什么意思?
      • 客户端没有被重定向,只是重写
      猜你喜欢
      • 2014-11-07
      • 2017-04-18
      • 2013-04-18
      • 2020-01-17
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      相关资源
      最近更新 更多