2012-10-04 81 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

相關問題