使用htaccess文件来控制单个php文件的问题

时间:2010-11-23 10:27:08

标签: php .htaccess

在我的网站上,为了搜索和比较不同的东西的价格,我已经形成了“搜索”按钮。当用户输入关键字(他想要比较价格的东西),类别等并点击“搜索”按钮时,地址栏中的URL与我想要的完全相同(即/ sp / searchresults / camera / 115 / Search / bla / bla /////)使用以下代码:

  

上的RewriteEngine      

RewriteRule ^ searchresults(。*)$

     

searchresults.php关键字= $ 1和;类别= $ 2及T = $ 3及btnsearch = $ 4和; MANUF = $ 5安培; brname = $ 6和; pricerange = $ 7和; H = $ 8安培; K = $ 9 &安培; MERCHANTID = $ 10安培;排序= $ 11   [L]

现在问题是当我想在任何其他页面上拥有'关键字','商品'和'排序'时,它会给我'.php'而不是给我项目名称,商家ID和排序结果。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:0)

是的,你的问题很少,

对于使用^ searchresults(。*)$的初学者,只有在搜索结果为一个()之后捕获所有内容时,你才会得到1美元,

第二个我不确定你是否有11美元我确定你唯一被允许10但是必须等待另一个用户说是否是这种情况。

试试这个

RewriteRule ^searchresults_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)_(.*?)$ searchresults.php?keyword=$1&categories=$2&t=$3&btnsearch=$4&manuf=$5&brname=$6&pricerange=$7&h=$8&k=$9&merchantid=$10&sort=$11 [L]

但是仍然不确定它是否会有效,因为你有超过10个$ vars

评论 RewriteRule ^ serachresults(。*?)$ search.php [L]

P.S我发现另一个问题是你的^ searchresults(。*)$会对searchresults.php采取行动并创建一个重定向循环

答案 1 :(得分:0)

  

重写规则   ^(?)/(。?)/(?)/(。?)/(?)/(。? )/(?)/(。?)/(。*?)。SearchResult所$

     

searchresults.php关键字= $ 1和;类别= $ 2及T = $ 3及btnsearch = $ 4和; MANUF = $ 5安培; brname = $ 6和; pricerange = $ 7和; H = $ 8安培; K = $ 9 & merchantid = $ 10& sort = $ 11 [L]

答案 2 :(得分:0)

我最好的建议是使用如下的HTACCESS规则:

RewriteRule searchresult/(.*)$ searchresults.php?fullparam=$1

然后,在PHP脚本中,解析$_GET['fullparam']值。

$params = array();
if( isset( $_GET['fullparam'] ) )
  $params = explode( '/' , $_GET['fullparam'] );
  # You can use any delimiter, '/' or '_' or '-' or whatever you like

OR,使用原始问题中提到的参数顺序和名称

if( isset( $_GET['fullparam'] ) )
  list( $keyword , $categories , $t , $btnsearch , $manuf , $brname ,
        $pricerange , $h , $k , $merchantid , $sort ,  )
    = explode( '/' , $_GET['fullparam'] , 12 );

此解决方案的好处是您拥有最简单的HTACCESS规则,并且您可以使用PHP的灵活性来允许URL中的任意数量的元素。