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 方法可以用来实现我想要的?

您应该提取 url 并使用 'include' 函数相应地路由,而不是重定向。您可以在路由之前应用您的逻辑。

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

回答您的问题:

  1. 是的,header() 输出 HTTP 301 header 生成另一个请求。
  2. SOLUTIONinclude() 相应的页面,而不是使用 header().
  3. 重定向到它

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

  1. url.php 使用 header() 函数
  2. 重定向到 index.php
  3. index.php 又被您的 .htaccess 重写为 url.php

要打破这个循环,您应该放弃两个操作之一(我投票赞成放弃第一个)。