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

时间:2015-01-22 11:03:15

标签: php .htaccess mod-rewrite redirect

我目前正在将所有请求转发到单个.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到它重定向到的页面的永不停止的循环。

问题:
- &GT; header()函数是否始终参考.htaccess文件,或者有没有办法跳过它并直接转到网址?
- &GT;如果它总是参考它,是否有一种不同的PHP方法可以用来实现我想要的东西?

2 个答案:

答案 0 :(得分:1)

您应该使用“include”功能提取网址并进行相应路由,而不是重定向。您可以在路由之前应用逻辑。

答案 1 :(得分:1)

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

回答你的问题:

  1. 是的,header()输出一个HTTP 301标头,生成另一个请求。
  2. 解决方案include()相应的网页,而不是使用header()重定向到该网页。
  3. 注意:
    正如 @goldlife 在评论中指出的那样,您的规则和页面一起生成循环,因为:

    1. url.php使用index.php函数
    2. 重定向到header() 反过来,
    3. index.php会被.htaccess重写为url.php
    4. 要打破这个循环,你应该放弃两个操作中的一个(我投票放弃第一个操作)。