使用htaccess的PHP重定向位置

使用htaccess的PHP重定向位置,php,session,.htaccess,redirect,Php,Session,.htaccess,Redirect,在我的一个页面中,管理员是允许的,但是,如果没有设置会话,我会使用头将他们重定向到index.php,并且该方法可以工作 如果我将index.php替换为home,这是针对htaccess的,它将其更改为index.php,但在浏览器中会出现错误 这项工作: if(!isset($_SESSION['MEMBER'])){ header("Location: index.php"); } 这不起作用: if(!isset($_SESSION['MEMBER'])){ header("Locat

在我的一个页面中,管理员是允许的,但是,如果没有设置会话,我会使用头将他们重定向到index.php,并且该方法可以工作

如果我将index.php替换为home,这是针对htaccess的,它将其更改为index.php,但在浏览器中会出现错误

这项工作:

if(!isset($_SESSION['MEMBER'])){ header("Location: index.php"); }
这不起作用:

if(!isset($_SESSION['MEMBER'])){ header("Location: home"); }
htaccess:

RewriteRule ^home$ index.php
Firefox中的错误:

页面未正确重定向

Firefox检测到服务器正在重定向此请求 用一种永远不会改变的方式来称呼 完成。

此问题有时可能是由于禁用或拒绝接受导致的 饼干。


怎么了?如何使用此方法?

您正在将index.php重定向到php文件中的home,并将home重定向到.htaccess中的index.php。Firefox告诉你有一个无限的重定向循环

编辑: php和home是同一件事,因此重定向到其中一个将导致无限循环。您需要这样做:

#.htaccess
RewriteRule ^home$ index.php        # public page
RewriteRule ^members$ members.php   # member only page
然后在index.php中

# index.php
if(isset($_SESSION['MEMBER'])){
    header("Location: members");
    exit;
}

您已经创建了一个无限循环。 当PHP执行以下代码时:

if(!isset($_SESSION['MEMBER'])){ header("Location: home"); }
它将浏览器重定向到
/home

但是在
.htaccess
中,您将URL重写为
/index.php
。这会再次使PHP执行上述PHP代码。

相反。下面是如何在
.htaccess
重定向中携带PHP会话id的

RewriteEngine On
RewriteRule ^(.*)$ /home/  [QSA,L,E=REDIRECT_URL:$1]

注意最后一点
[QSA,L,E=REDIRECT\u URL:$1]

所以我不能在php头中使用“home”?你可以,你不能重定向回自己。@Wayne:你可以在php头中使用
home
,但一定要更改
$\u SESSION['MEMBER']
的值以防止无限循环。