Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以只使用PHP而不是.htaccess修改url吗?_Php_Url - Fatal编程技术网

我可以只使用PHP而不是.htaccess修改url吗?

我可以只使用PHP而不是.htaccess修改url吗?,php,url,Php,Url,我的最终目标是使用php从url中删除查询字符串。所以我不想在PHP更改使用查询字符串参数之前删除它 我想带你去:http://www.mysite.com?id=3993993" 并使用PHP使用$_GET['id']执行一些操作 然后从url中删除“?id=3993993”,留给我们”http://www.mysite.com“ 关于如何做到这一点,你有什么想法吗?你可以通过PHP函数来实现它你可以重定向到http://www.mysite.com: header('Location: ht

我的最终目标是使用php从url中删除查询字符串。所以我不想在PHP更改使用查询字符串参数之前删除它

我想带你去:http://www.mysite.com?id=3993993"

并使用PHP使用$_GET['id']执行一些操作

然后从url中删除“?id=3993993”,留给我们”http://www.mysite.com“


关于如何做到这一点,你有什么想法吗?

你可以通过PHP函数来实现它

你可以重定向到
http://www.mysite.com

header('Location: http://www.mysite.com');

请注意,输出任何内容后都无法执行此操作,因此如果要基于该id生成输出,则会遇到问题。您可以将id存储在会话中,并在重定向后读取和处理它,但如果客户端已禁用Cookie,则此操作将不起作用。

您可以从
$\u GET
检索该值并将其存储在
$\u会话中,然后重定向:

// Load the id from GET into SESSION
session_start();
$_SESSION['id'] = isset($_GET['id']) ? $_GET['id'] : NULL;

// Reidrect to the new URL
if (isset($_GET['id'])) {
  header("Location: http://www.mysite.com");
  exit();
}

// Reload the value from $_SESSION if it is there (and not also in $_GET)
if (!empty($_SESSION['id']) && !isset($_GET['id'])) {
  $id = $_SESSION['id'];
  // Remove it from SESSION to prevent accidental reloads
  unset($_SESSION['id']);
}

进行重定向并检查推荐人。为了安全起见,您也可以将其保存到cookie或$\u会话变量中。

唯一的方法是让PHP“记住”id的值,因为一旦它重定向到“mysite”,它就不再有数据了

我会使用Cookie或会话数据,即使页面刷新,这些数据也是持久的

我会这样做:

$_SESSION['tempid'] = $_GET['id']; //for remembering the data
header("Location: index.php"); //redirect
然后,您可以随时使用会话变量引用此变量:

$dosomethingwith = $_SESSION['tempid'];
unset($_SESSION['tempid']);

您可能希望在使用tempid之后清除session变量。我认为唯一的方法是捕获任何GET值,将它们存储在session中,然后重定向到同一页面而不设置参数

if(!empty($_GET)) {
    $_SESSION['GET'] = $_GET;
    $url = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
    header('Location: '.$url);
    die();
}


if(!empty($_SESSION['GET'])) {
    $_GET = $_SESSION['GET'];
    unset($_SESSION['GET']);
}

我不建议您这样做,但是,一种解决方案可能是设置一个cookie,注册一个包含查询参数的会话变量,然后将用户从页面重定向到页面


我强烈建议你不要使用这个:大多数搜索引擎机器人不会接受cookies


我没有测试这个脚本

所以你想从一个有ID的URL重定向到一个没有ID的URL?首先为什么ID在那里,你在用它做什么吗?+1但我希望OP不会将其用于站点导航,因为后退按钮将不再起作用。
<?php 
session_start();
$_COOKIE['something'] = md5($whatever);
$_SESSION['query'] = $_SERVER['QUERY_STRING'];

if ($_SERVER['QUERY_STRING'] != '/')
   header("Location: /");

if ( isset ($_SESSION['query']) ){
   /* display your page */
}
?>