我目前正在将所有请求转发到单个.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文件。
要回答您的问题:
- 是的,
header()
输出一个 HTTP 301 标头,该标头会生成另一个请求。 -
解决方案是
include()
相应的页面,而不是使用header()
重定向到它。
注意:
正如@goldlife评论中指出的那样,您的规则和页面一起生成一个循环,因为:
-
url.php
使用header()
功能重定向到index.php
- 反过来,
index.php
被您的.htaccess
重写为url.php
要打破这个循环,你应该放弃两个操作中的一个(我投票赞成删除第一个)。
您应该
使用"include"功能提取 url 并相应地路由,而不是重定向。 您可以在路由之前应用逻辑。