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 文件。
回答您的问题:
- 是的,
header()
输出 HTTP 301 header 生成另一个请求。
-
SOLUTION 是
include()
相应的页面,而不是使用 header()
. 重定向到它
注:
正如 @goldlife 在评论中指出的那样,您的规则和页面一起生成了一个循环,因为:
url.php
使用 header()
函数 重定向到 index.php
index.php
又被您的 .htaccess
重写为 url.php
要打破这个循环,您应该放弃两个操作之一(我投票赞成放弃第一个)。
我目前正在将所有请求转发到一个 .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 文件。
回答您的问题:
- 是的,
header()
输出 HTTP 301 header 生成另一个请求。 -
SOLUTION 是
include()
相应的页面,而不是使用header()
. 重定向到它
注:
正如 @goldlife 在评论中指出的那样,您的规则和页面一起生成了一个循环,因为:
url.php
使用header()
函数 重定向到 index.php
又被您的.htaccess
重写为url.php
index.php
要打破这个循环,您应该放弃两个操作之一(我投票赞成放弃第一个)。