Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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 删除使用表单'添加到url的问号;获取';方法_Php_Forms_.htaccess_Url_Get - Fatal编程技术网

Php 删除使用表单'添加到url的问号;获取';方法

Php 删除使用表单'添加到url的问号;获取';方法,php,forms,.htaccess,url,get,Php,Forms,.htaccess,Url,Get,我正在使用一个表单和“get”方法为用户提供一个返回选项,返回他们来自我的站点的未知url,如下代码所示。与浏览器后退按钮相比,我更喜欢它,而且它在没有javascript的情况下工作 我遇到的问题是,一些浏览器(chrome、safari,可能还有其他浏览器)在他们引用的url末尾添加了一个问号。我不希望这是因为搜索引擎优化的原因 我的问题是: 1) 我能在php代码中以某种方式防止问号吗;或 2) 请有人告诉我如何使用htaccess重定向url,我的url可能会结束:- .html? .

我正在使用一个表单和“get”方法为用户提供一个返回选项,返回他们来自我的站点的未知url,如下代码所示。与浏览器后退按钮相比,我更喜欢它,而且它在没有javascript的情况下工作

我遇到的问题是,一些浏览器(chrome、safari,可能还有其他浏览器)在他们引用的url末尾添加了一个问号。我不希望这是因为搜索引擎优化的原因

我的问题是:

1) 我能在php代码中以某种方式防止问号吗;或

2) 请有人告诉我如何使用htaccess重定向url,我的url可能会结束:-

.html?

.htm?

.php?

/?
提前谢谢

<?php
if (isset ($_SERVER['HTTP_REFERER']) ) {
$url = htmlspecialchars($_SERVER['HTTP_REFERER']);
echo '<br /><form action="' . $url . '" method="get">
<div id="submit"><input type="submit"  value="Return to previous page" /></div>
</form>';
}
?>

添加
可能是因为您正在执行来自表单的
GET
请求

为什么不这样做呢:

<input type="button" onclick='document.location.href=<?php echo json_encode($url);?>'>;

在htaccess中,您应该有如下内容:

RewriteEngine on
RewriteRule ^myPage-([a-zA-Z0-9_]*).html myPHPfile.php?var=$1

通过上面添加到htaccess中的内容,当调用像
myPage which.html
这样的URL时,它就像调用
myPHPfile.php?var=which

使用表单是否相关?为什么不使用超链接并使用CSS将其样式设置为您想要的样子

您可以尝试使用按钮,而不是创建要传递的输入值

<form action="url" method="get">
    <button type="submit">Return to previous page</button>
</form>

返回上一页

< /代码> 使用代码> POST <代码>方法而不是<代码>获取< /COD> < /P> < P>而不是张贴到随机URL(这不是一个好主意)考虑使用重定向< /P> 解决办法是

<?php
if (isset ($_SERVER['HTTP_REFERER']) ) {
$url = htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES,'UTF-8');
echo '<br /><form action="redirect.php" method="get">
<input type="hidden" name="return" value="'.$url.'">
<div id="submit"><input type="submit"  value="Return to previous page" /></div>
</form>';
}
?>

两者都将在浏览器中创建新的历史记录条目。

不要使用引用程序。它经常是错误的/伪造的,而且通常是完全不可靠的。即使在我自己的网站上?到目前为止我还没有注意到它是错的。马克B是对的。通常,您不能信任HTTP\U REFERER。马丁:也许不在你的浏览器中,但推荐人通常会被各种互联网隐私软件包、url匿名器等关闭。。。仅仅因为你没有使用它们并不意味着其他人不会使用它们。好吧,谢谢Marc B,当javascript关闭时,大概没有可靠的方法可以做到这一点,只有浏览器后退按钮?谢谢,但我特别希望它在没有javascriptWell的情况下工作。你可以始终使用
POST
:/你是正确的,这会引起问号。我不确定是否使用POST。如果目标页面已经有一个用于其他目的的POST表单,是否会有问题?不,它不应该引起问题,但也不是很漂亮。我事先不知道url?。。。这完全无助于回答这个问题。是的,这就是您使用重写规则的方式,但是它绝对不会从被调用URL的末尾删除问号。
<?php
if (isset ($_GET['return'] ) {
    $url = $_GET['return'];
    header('Location: '.$url, true, 303); // or 302 for compatibility reasons
    echo '<a href="'.htmlspecialchars($url,ENT_QUOTES,'UTF-8').'">Continue</a>';
    exit;
}else{
    echo 'Error, no redirect specified';
}
if (isset ($_SERVER['HTTP_REFERER']) ) {
    $url = htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES,'UTF-8');
    echo '<a href="'.$url.'">Return to previous page</a>';
}