2012-10-04 70 views
3

如何隐藏在URL参数(QUERY_STRING),但将其发送到页面隐藏的,不可见的地址栏
例如:
我有这样的:
隐藏参数(查询字符串)的URL(htaccess的),但这个参数发送到页面(PHP)

http://localhost/index.php?sent=true 

我想:

http://localhost/index.php 

,但我想在PHP $ _GET [ '发送']

以获取发送参数

我试图重定向到页面不带参数(无QUERY_STRING)[R]和给页之后的一些参数(静默)无[R]的重定向(不改变ADRESS本身)

我试图使用重写规则中htaccess与不同的标志和不同的方式,但没有任何工作

我了解到,如果我想在浏览器中更改地址,我必须在一个RewriteRule行中使用R标志与L标志 - 其他方式不起作用 - 地址不会改变

但是当我使用[L]标志I不能去下一行(下一个重写规则)和任何附加QUERY_STRING解决无[R]的重定向

如果我不把在第一行的[L]标记([R])我没有新的地址,但如果我做 - 我不能使用[C]标记甚至[N]标志


这是为什么:

我的网页上我使用的标题(“位置:...发送=真的吗?”)从形式 我重定向发送成功后,数据功能到?发送=正确的,因为我不希望用户刷新页面,然后重新发送相同的数据

但重定向后?SE nt = true我不想在地址栏 有那个query_string那里有更多的表单会发送其他POST数据和刷新页面与这个丑陋的query_string那里

如何做到这一点?

回答

2

你可以设置它,这样,如果你访问与?sent=true脚本一旦完成,它会将用户重定向

例如

if(!empty($_GET['sent'])&&$_GET['sent']) { 
    //do stuff 
    header("Location: http://localhost/index.php"); 
} 

,你需要传递给PHP你不能用htaccess的做到这一点,它的传递,因此,如果您与htaccess的价值将永远到不了PHP重定向后重定向到PHP。


进一步的问题,要做到这一点,那么唯一的办法就是给用户一个JavaScript的形式重定向

<?php if(!empty($_GET['sent'])&&$_GET['sent']) { ?> 
<form action='http://localhost/index.php' method='post' name='frm'> 
    <?php 
    foreach ($_GET as $a => $b) { 
     echo "<input type='hidden' name='".$a."' value='".$b."'>"; 
    } 
    ?> 
    </form> 
    <script language="JavaScript"> 
     document.frm.submit(); 
    </script> 
<?php } ?> 
+0

肯定的,但我想显示消息成功后用户,所以我得到$ _GET [“发送”]参数从URL,如果有一个我显示消息 – camel

+0

这是一个好主意!谢谢!我甚至可以使用php来指定index.php的“action”参数来“绘制”页面上的表单。但我很好奇,如果有可能发送参数,而不显示他们在网址? :) – camel

0

饼干可能是一个解决方案,你可以用它们来传递从页面数据到页面并且不可见,至少对于普通用户不太容易。

或者,如果可能的话,$ _SESSION也是一个很好的解决方案,从一个页面发送数据到另一个。

+0

但如果我有多个页面打开(标签)?和我同时提交表单?我将有一个“已发送”变量的cookie被覆盖 – camel

0

你可以指定在apache的变量:

SetEnvIf Request_URI "\sent=true$" SENT=1 

然后检索在PHP中,如:

if (isset($_SERVER['SENT'])) { 
    echo "Received sent variable from apache, value is " . $_SERVER['SENT']; 
} else { 
    echo "not received sent variable from apache"; 
} 

UPDATE
您需要设置AllowOverride FileInfoAllowOverride ALL的httpd .conf文件或.htaccess文件,与此考试一样PLE:

<Directory /home> 
AllowOverride FileInfo 
</Directory> 
+0

但是如果我打开了很多选项卡并且我正在同时发送数据呢? Cookie和会话也存在同样的问题。 apache变量,cookie或session对于浏览器中的所有页面/标签是全局的,并且用户操作总是特定于具体标签 – camel

+0

你错了,这个apache变量是在每个请求中设置的,没有以任何方式跨会话或其他类似的缓存,它是每页请求唯一。 – Nelson

+0

我将此行添加到htaccess并且输出为“未从apache接收到发送的变量” – camel

相关问题