在查询字符串re_writes中获取变量

时间:2010-09-01 12:59:49

标签: php .htaccess mod-rewrite

我正在尝试将这四个get变量(sch,val,lmt,ord)组合成一个漂亮的url re_write。目前我的.htaccess文件中有以下内容,如果包含所有变量,它都有效,但是,如果我只输入前两个变量(sch& val),它会中断:

RewriteRule ^search/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ 
             search.php?sch=$1&val=$2&lmt=$3&ord=$4 [L]

www.domain.com/search/City/London/5/asc有效 www.domain.com/search/City/London但这不是

2 个答案:

答案 0 :(得分:2)

为什么不在其前面添加其他重写规则。 IE:

 RewriteRule ^search/([^/]*)$ 
         search.php?sch=$1 [L]
 RewriteRule ^search/([^/]*)/([^/]*)$ 
         search.php?sch=$1&val=$2 [L]
 RewriteRule ^search/([^/]*)/([^/]*)/([0-9]*)$ 
         search.php?sch=$1&val=$2&lmt=$3 [L]
 RewriteRule ^search/([^/]*)/([^/]*)/([0-9]*)/([^/]*)$ 
         search.php?sch=$1&val=$2&lmt=$3&ord=$4 [L]

那应该有用。不确定它是否是你想要的,但我真的不认为这样做是“可能的”,而不仅仅是做一个查询并将完整的查询字符串作为一行传递然后解析它的PHP端。

修改

在.htaccess与PHP中完成所有这一切的好处是它需要更少的逻辑,并以正确的值传递您想要的脚本。我的偏好是使用上面的.htaccess。

答案 1 :(得分:2)

你可以使用它,以文本和解析的方式获取整个路径 www.domain.com/search/City/London/5/asc正在www.domain.com/search/City/London工作,但这不是

RewriteRule ^search/(.*)$ search.php?url=$1
$paths=explode('/',$_GET('url'));

输出
www.domain.com/search/City/London/5/asc

$路径=城市,伦敦,5,ASC

www.domain.com/search/City/London

$路径=城市,伦敦

您可以使用循环和配对作为键/值...如果需要