2014-10-28 121 views
0

我有文件(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> 

回答

0

,当您重定向的页面,你总是松散的变量$ _ POST。

可以先使你的PHP的工作,然后你用PHP函数头()

+0

感谢您的回复。我认为$ _Session会处理这个问题,或者在获取表单变量之前首先进行重定向。 – Ria 2014-10-28 11:13:08

0

是帖子的内容,当您使用您的规则R标志做一个重定向或做从PHP重定向确实丢失重定向。

如果你想在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请求的重定向规则。

+0

再次感谢您的回复,但是如果我想转到下一页,它将不起作用,第一页保持不变,但网址已从搜索更改为搜索/。 – Ria 2014-10-28 14:34:38

+0

你想在浏览器中显示'/ Search'还是'/ Search /'? – anubhava 2014-10-28 14:49:07

+0

我可以有/搜索/请 – Ria 2014-10-28 14:54:48