2011-09-28 505 views
0

我有網頁http://mysite.com?page=3&var=10頁面上也有表格。使用PHP更改網址

當表單提交了一些在PHP中的動作,但我需要刪除這個?page=3&var=10表單提交後以某種方式有方式兼容所有瀏覽器通過PHP沒有mod_rewrite?

+0

使用POST而不是GET將隱藏您提交的表單中的參數。 –

+0

爲什麼不將表單轉換爲使用POST,那麼URL中就沒有參數了。或者之後重新定向。 – 2011-09-28 19:13:08

+0

此參數來自頁面分頁而不是表格。 – JohnA

回答

0

如果您使用的是action=index.php,那麼所有的值都會被張貼到index php,?page=3&var=10會被自動刪除。

如果你想要發佈到同一個頁面您可以使用「行動=的index.php?頁= 3 & VAR = 10」或action=<?php echo $_SERVER['PHP_SELF'] ?>

您可以在頁面的開始檢查提交的東西然後重定向到任何你想要的東西header('Location: http://www.example.com/ ');關於標題功能的更多信息http://php.net/manual/en/function.header.php

+0

PHP_SELF是php *腳本*的名稱,與'$ _SERVER ['REQUEST_URI']'中的實際uri的路徑相反,它們在性質和用途上完全不同。因此,當一個php腳本可以表示數千個不同的url路徑時,「PHP_SELF」在更改* original * url方面沒有用處。 – user3338098

0

這是否適合您?

header('Location:/'); 
-1

呀,解決方案很簡單(即使不是真的搜索引擎友好):

<?php 
header("Location: http://mysite.com") 
?> 

只是信息......你爲什麼需要它?

+0

如果我使用頭,我必須通過使用exit來殺死中間的腳本;或者死; – JohnA

+0

即使我沒有它仍然只是重定向到空白頁面,並從頭開始重新從頭開始沒有$ _POST形式 – JohnA

+0

爲什麼你不能簡單地處理'$ _POST'數據之前重定向瀏覽器? – ArtoAle

-1

mod_rewrite不會影響用戶的瀏覽器地址欄中顯示的內容,除非重寫進行外部可見的重定向。否則,它只會在Web服務器中重寫內容,而這對用戶是不可見的。

如果您想要影響用戶的地址欄,則必須在窗體完成處理後通過header('Location: ...')進行重定向。

0

使用parse_str將查詢字符串作爲易於修改的關聯數組。然後使用http_build_query將關聯數組轉換爲查詢字符串。

$queryString = $s['QUERY_STRING']; 
$params = array(); 
parse_str($queryString, $params); 
//change $params as needed 
$queryString = http_build_query($params); 
if ($queryString) { 
    $queryString = '?'.$queryString; 
} 
return preg_replace("/\\?.*/s","",$s['REQUEST_URI']).$queryString; 

preg_replace("/\\?.*/s","",$s['REQUEST_URI'])刪除原來的查詢字符串,允許您替換它。

1

這是一個古老的話題,但爲了防止其他人在將來尋找此目錄,可以使用javascript replaceState更改歷史記錄和瀏覽器欄標籤。一個簡單的PHP函數來做到這一點:

function set_url($url) 
{ 
    echo("<script>history.replaceState({},'','$url');</script>"); 
} 

然後就只需調用與所需的URL該功能(大概下降後的變量):調用另一個頁面後

set_url("http://example.com"); 

頁面重載或背現在將在歷史中具有新的URL位置。

我認爲使用POST可能是一個更優雅的解決方案,但如果您必須使用GET,這是一個解決方法。