[英]Redirect with form variable doesn't work properly
我在文件(search.php)上使用了如下接收的變量:
session_start();
if (isset($_POST['Search'])){
$_SESSION['Search'] = $_POST['Search'];
}
表格:
<form id="searchbox" action="/search.php" method="post">
<input id="search" name="Search" type="text" placeholder="Search Products">
<input id="submit" type="submit" value="Search" ></form>
所以它順服於自己
我有以下重定向:
rewritecond %{THE_REQUEST} \s/+search\.php? [NC]
rewriterule ^ /Search/? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/?$ /search.php? [L,QSA]
rewritecond %{THE_REQUEST} \s/+search\.php\?pageNum_RS_Search=([^\s&]+)&totalRows_RS_Search=([^\s&]+) [NC]
rewriterule ^ /Search/%2/%1? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/([^/]+)/([^/]+)/?$ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]
哪個將search.php重寫為Search /並將分頁重寫為Search / 12/1,這是我想要的。
問題是執行搜索時未使用$ _POST ['Search']變量。 沒有適當的重定向,它可以正常工作。 任何幫助歡迎
這是用於分頁和搜索請求的腳本:
$maxRows_RS_Search = 7;
$pageNum_RS_Search = 0;
if (isset($_GET['pageNum_RS_Search'])) {
$pageNum_RS_Search = $_GET['pageNum_RS_Search'];
}
$startRow_RS_Search = $pageNum_RS_Search * $maxRows_RS_Search;
$colname_RS_Search = "-1";
if (isset($_SESSION['Search'])) {
$colname_RS_Search = $_SESSION['Search'];
}
mysql_select_db($database_dconn, $dconn);
$query_RS_Search = sprintf("SELECT * FROM products WHERE (Category LIKE %s OR products.Manufacturer LIKE %s OR products.Model LIKE %s OR products.Color LIKE %s) AND Category!= 'Stage Pianos' AND Category!= 'Recent Pianos' AND Category!= 'Recent Keyboards' AND hidden ='no'", GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"));
$query_limit_RS_Search = sprintf("%s LIMIT %d, %d", $query_RS_Search, $startRow_RS_Search, $maxRows_RS_Search);
$RS_Search = mysql_query($query_limit_RS_Search, $dconn) or die(mysql_error());
$row_RS_Search = mysql_fetch_assoc($RS_Search);
if (isset($_GET['totalRows_RS_Search'])) {
$totalRows_RS_Search = $_GET['totalRows_RS_Search'];
} else {
$all_RS_Search = mysql_query($query_RS_Search);
$totalRows_RS_Search = mysql_num_rows($all_RS_Search);
}
$totalPages_RS_Search = ceil($totalRows_RS_Search/$maxRows_RS_Search)-1;
$queryString_RS_Search = "";
if (!empty($_SERVER['QUERY_STRING'])) {
$params = explode("&", $_SERVER['QUERY_STRING']);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum_RS_Search") == false &&
stristr($param, "totalRows_RS_Search") == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_RS_Search = "&" . htmlentities(implode("&", $newParams));
}
}
$queryString_RS_Search = sprintf("&totalRows_RS_Search=%d%s", $totalRows_RS_Search, $queryString_RS_Search);
分頁觸發如下:
<td><?php if ($pageNum_RS_Search > 0) { // Show if not first page ?>
<a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, 0, $queryString_RS_Search); ?>">First</a>
<?php } // Show if not first page ?></td>
<td><?php if ($pageNum_RS_Search > 0) { // Show if not first page ?>
<a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, max(0, $pageNum_RS_Search - 1), $queryString_RS_Search); ?>">Previous</a>
<?php } // Show if not first page ?></td>
<td><?php if ($pageNum_RS_Search < $totalPages_RS_Search) { // Show if not last page ?>
<a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, min($totalPages_RS_Search, $pageNum_RS_Search + 1), $queryString_RS_Search); ?>">Next</a>
<?php } // Show if not last page ?></td>
<td><?php if ($pageNum_RS_Search < $totalPages_RS_Search) { // Show if not last page ?>
<a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, $totalPages_RS_Search, $queryString_RS_Search); ?>">Last</a>
<?php } // Show if not last page ?></td>
重定向頁面時,始終會釋放變量$ _POST。
您可以先使您的php工作,然后使用php函數Header()進行重定向
是的,當您使用規則中的R
標志進行重定向或執行PHP重定向時,POST內容的確會丟失。
如果要在POST操作中使用漂亮的URL,最好像這樣更改form
的action
部分:
<form id="searchbox" action="/Search" method="post">
<input id="search" name="Search" type="text" placeholder="Search Products">
<input id="submit" type="submit" value="Search" ></form>
您的規則的更正版本是:
RewriteCond %{REQUEST_METHOD} !POST
rewritecond %{THE_REQUEST} \s/+search\.php[\s?] [NC]
rewriterule ^ /Search/? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/?$ /search.php [NC,L,QSA]
RewriteCond %{REQUEST_METHOD} !POST
rewritecond %{THE_REQUEST} \s/+search\.php\?pageNum_RS_Search=([^\s&]+)&totalRows_RS_Search=([^\s&]+) [NC]
rewriterule ^ /Search/%2/%1? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/([^/]+)/([^/]+)/?$ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]
RewriteCond %{REQUEST_METHOD} !POST
將跳過POST
請求的重定向規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.