0

我有一个 php 页面,它应该包含在 otherpage 但不直接包含。让我们假设它为 1.php,另一个页面为 2.php

1.php

<?php
   if($_SERVER['REQUEST_URI'] == "/1.php"){
       header("Location:2.php");
   }
   else
   {
       //some code here
   }
?>

2.php

<?php
   include("1.php");
?>

这运行良好localhost/1.php并且已被重定向到,localhost/2.php 但这给我带来了一个问题,localhost/1.php?somegetmethod=data我发现任何人都可以通过?something=something在 1.php url 的末尾键入来访问此页面。如何更改可以重定向所有以 localhost/1.php 开头的 url 的代码

4

5 回答 5

2

您可以像这样检查子字符串是否位于给定位置

if(strpos($_SERVER['REQUEST_URI'], "/1.php") === 0) {

这将检查是否REQUEST_URI/1.php(= 位于位置 0)开头

于 2012-09-12T08:22:52.483 回答
1

尝试一下:

if($_SERVER['SCRIPT_NAME'] == "/1.php")
于 2012-09-12T08:23:41.793 回答
1

使用$_SERVER['PHP_SELF']而不是$_SERVER['REQUEST_URI'].

于 2012-09-12T08:23:56.580 回答
1

$_SERVER['REQUEST_URI']包含请求页面的 URI,在你的情况下它是1.php?somegetmethod=data.

更改代码如:

if(strpos($_SERVER['REQUEST_URI'], "/1.php") === 0){
    header("Location:2.php");
}else{
    //some code here
}
于 2012-09-12T08:24:36.440 回答
0

例如,在 MediaWiki、WordPress 和许多其他此类应用程序中,您经常看到的是:

1.php

if ( !defined( 'YOURAPPCONSTANT' ) ) {
  // You could choose to redirect here, but an exit would make just as much  
  // sense. Someone has deliberately chosen an incorrect url.
  echo "Cannot directly call this file.";
  exit( 1 );
}

2.php

define('YOURAPPCONSTANT', 'It is defined');
include('1.php');

这样,2.php 就是您的应用程序的入口,而不管用于访问它的 url。我认为这是一种更安全、更灵活的方式,而且它经常被使用是有原因的。

于 2012-09-12T08:29:33.430 回答