如何在.htaccess缩短时使用分页管理搜索结果

时间:2014-08-13 07:47:22

标签: php .htaccess url

这里是关于在php语言上开发的应用程序。

问题在于分页,有三个变量(PAGE,refone,reftow)

不是表单看起来像:

<from>
   <input type=text name=refone>
   <input type=text name=reftow>
<input type=submit value=search name=search>
</from>

当用户提交搜索结果时,

例如 - &gt; refone = 1和reftow = any

in the actual url = ?page=1&refone=1&reftow=%     ... this works
with .htaccess url = ?page/1/1/%                  ... not works

现在因为有搜索的两个选项(refone&lt; - &gt; reftow)(refone - &gt; any)(任何&lt; - reftow)基本上它正在使用普通网址,但是当我使用时。 htaccess用于缩短它并且不让用户知道确切的url作业,所以我使用下面的.htaccess来更好地保护和网址管理,如缩短。

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} -d
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule . - [L]

RewriteRule ^sref/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+) sref.php?page=$1&refone=$2&reftow=$3 [L,NC] 
RewriteRule ^sref/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+) sref.php?page=$1&refone=$2 [L,NC] 
RewriteRule ^sref/([-a-zA-Z0-9]+)/?$ sref.php?page=$1 [L,NC]

现在是以下情况:

http://m.lhost/web/sref.php?page=1&refone=1&reftow=%
http://m.lhost/web/sref.php?page=1&refone=%&reftow=1
http://m.lhost/web/sref.php?page=1&refone=%&reftow=%

它有效,即使我像第2,3页一样使用分页......它会起作用但是在使用.htacess之后

http://m.host/web/sref/1/1/%
http://m.host/web/sref/1/%/1
http://m.host/web/sref/1/%/%

这里不能罚款网址。 注意:在搜索之后,它将使用基于搜索结果的分页,这里没有.htaccess工作正常但是如果我使用.htacess有问题。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您必须将%添加到允许的字符列表中,同时您的RewriteRule应以web/sref/...

开头
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} -d
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule . - [L]

RewriteRule ^web/sref/([A-Za-z0-9_-]+)/([\%A-Za-z0-9_-]+)/([\%A-Za-z0-9_-]+) sref.php?page=$1&refone=$2&reftow=$3 [L,NC] 
RewriteRule ^web/sref/([A-Za-z0-9_-]+)/([\%A-Za-z0-9_-]+) sref.php?page=$1&refone=$2 [L,NC] 
RewriteRule ^web/sref/([-a-zA-Z0-9]+)/?$ sref.php?page=$1 [L,NC]