rewritecsecond与查询字符串的工作,但当我从干净的url提交一个新的查询,它只是附加了旧的查询字符串的url



以下是我的重写规则和条件

#link ReWrite
RewriteRule ^searchresults/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /searchresults.php?search=1&year_search_type=single&isused=$1&year=$2&make=$3&model=$4&price=$5 [L]
#query Rewrite
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteCond %{REQUEST_URI} ^/searchresults.php [NC]
RewriteCond %{QUERY_STRING} ^.*[&]?isused=(w+).*&year=(w+).*&make=(w+).*&model=(w+).*&price=(w+).*$ [NC]
RewriteRule . /searchresults/%1/%2/%3/%4/%5? [R=301,L]

情况-我有一个搜索页面,搜索数据库,并显示结果。这个设置捕获查询并将其重写为干净的url(太棒了!)但是,如果我第二次运行查询,也就是从清理后的url,搜索请求现在只是将原始的?key=value&key=value添加到清理后的url中以发出请求。

searchresults.php?make=value&model=value变成了searchresults/value/value

但是当我从搜索结果/值/值中运行第二个查询时,它最终将其转换为
/searchresults/价值/价值? = = value&模型值

要想从。htaccess中解决这个问题,任何方法都不行,因为搜索查询本身是在PHP代码的深处,我甚至找不到它,所以编辑PHP是不可能的。

也,作为奖励,如果有人能告诉我什么编辑,使查询发送一个请求,看起来像键=值+ +与+空格我得到正确的干净的url回来?现在,它采用键=值+ +空格,并给我返回"值",但下降+空格,并移动到下一个键值对....

谢谢

不知道为什么你有这个问题,你的规则对我来说在空白的htaccess文件中安装香草apache非常好。但是你可以试着稍微改变一下你的规则:

您需要做的第一件事是交换两个规则的顺序。重定向规则必须在任何内部重写之前。这可以防止两个规则应用于同一个请求(重写引擎循环遍历所有规则,直到URI停止更改)。其次,您需要匹配实际的请求,而不是%{QUERY_STRING}匹配%{THE_REQUEST}变量:

RewriteCond %{THE_REQUEST}  /+searchresults.php?.*[&]?isused=(w+).*&year=(w+).*&make=(w+).*&model=(w+).*&price=(w+).*$ [NC]
RewriteRule ^ /searchresults/%1/%2/%3/%4/%5? [R=301,L]
RewriteRule ^searchresults/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /searchresults.php?search=1&year_search_type=single&isused=$1&year=$2&make=$3&model=$4&price=$5 [L]

最新更新