我目前正在将所有请求转发到单个.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方法可以用来实现我想要的东西?
答案 0 :(得分:1)
您应该使用“include”功能提取网址并进行相应路由,而不是重定向。您可以在路由之前应用逻辑。
答案 1 :(得分:1)
每个HTTP请求都会使服务器读取.htaccess文件。
回答你的问题:
header()
输出一个HTTP 301标头,生成另一个请求。include()
相应的网页,而不是使用header()
重定向到该网页。 注意:强>
正如 @goldlife 在评论中指出的那样,您的规则和页面一起生成循环,因为:
url.php
使用index.php
函数header()
反过来,index.php
会被.htaccess
重写为url.php
要打破这个循环,你应该放弃两个操作中的一个(我投票放弃第一个操作)。