【问题标题】:URL redirect for pages with parameter only仅带有参数的页面的 URL 重定向
【发布时间】:2013-09-12 09:06:18
【问题描述】:

编辑:

如果我使用下面的脚本,它会与其他页面产生一些冲突:

 if (!isset( $_GET[ "id" ] ) ) {
  header( "Location: home.php" );
 }

这允许访问者访问所有带有 URL 参数的页面,例如:friends.php?id=22,这是我不想要的。 访问者应该可以访问的唯一带有参数的 URL 是 profile.php?id=$id


正在做一个需要用户注册/登录的小项目。

到目前为止,如果访问者(未登录)输入profile.php,他们将自动被重定向到主页。

现在,我想要完成的是,如果他们特别想查看用户的个人资料,例如 profile.php?id=22,则不要重定向他们。

这是我目前所拥有的:

if ((!preg_match("  {(?:login|logout|signin|register|profile)\.php$}",      
$_SERVER["PHP_SELF"])) && (empty($_SESSION["id"])) )
{     
    header('Location: home.php');
}

不幸的是,这将重定向所有输入 profile.php?id=22 的访问者。

简而言之,

profile.php 应该重定向,profile.php?id=$id 不应该。

【问题讨论】:

    标签: php url redirect


    【解决方案1】:

    这可能很简单:

    if ( !isset( $_GET[ "id" ] ) ){
      header( "Location: home.php" );
      exit();
    }
    

    基本上,我在这里所做的是测试id 魔法$_GET 变量中是否存在键。 $_GET 变量由您在 URL 中传递的所有参数填充。如果没有设置$_GET[ "id" ],那么我会重定向到home.php

    参考资料:

    【讨论】:

    • 抱歉,我不得不接受您的回答。我刚刚意识到您的脚本会导致与其他页面发生冲突。请参阅我编辑的问题,希望您能提供帮助。
    • @Lix,出于安全原因,您应该在标头重定向后跟随exit()
    • @ben - 你为什么不把这个逻辑放在profile.php上?
    • @Lix 确实,这太明显了,我没想到!谢谢!
    • @ben - 没问题 :) 乐于助人!
    【解决方案2】:
    Try this: 
    
    if (!isset($_GET["id"]))
    {     
        header('Location: home.php');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多