PHP 和 .htaccess 重定向循环 [header(location: url) 是否咨询 .htaccess?


PHP & .htaccess redirection loop [does header(location: url) consult .htaccess?]

我目前正在将所有请求转发到单个.php文件:

Options +FollowSymLinks
Options -Multiviews
Options All -Indexes
RewriteEngine On
RewriteRule ^(.*)$ urls.php [L,QSA]

为简单起见,假设urls.php页面如下所示:

<?php
    if(condition) {
        header( "Location: index.php" );
    } else {
        header( "Location: somewhere.php" );
    }
    die();
?>

当发出请求时,它会进入重定向循环,我认为这是因为这是一个永无止境的循环,从urls.php到它重定向到的页面,然后再返回。

问题:
-> header()函数是否总是查询.htaccess文件,或者有没有办法跳过它并直接转到 url?
-> 如果它总是咨询它,是否有不同的 PHP 方法可用于实现我想要的?

每个HTTP请求都会使服务器读取.htaccess文件。

要回答您的问题:

  1. 是的,header()输出一个 HTTP 301 标头,该标头会生成另一个请求。
  2. 解决方案include()相应的页面,而不是使用 header() 重定向到它。

注意:
正如@goldlife评论中指出的那样,您的规则和页面一起生成一个循环,因为:

  1. url.php 使用 header() 功能重定向到index.php
  2. 反过来,index.php被您的.htaccess重写为url.php

要打破这个循环,你应该放弃两个操作中的一个(我投票赞成删除第一个)。

您应该

使用"include"功能提取 url 并相应地路由,而不是重定向。 您可以在路由之前应用逻辑。