我有一个分配给特定类别的项目列表,我想根据这些区域过滤它们。
我当前的网址如下所示:
category,5,some-category-name.html
和.htaccess规则是:
RewriteRule ^category,([^-]*),([a-zA-Z0-9-]*).html$ category.php?id=$1
现在我想通过用户选择的区域来限制结果,因此我创建了一个包含复选框和提交按钮的get表单,其中包含复选框和提交按钮:
<form action="" method="get">
<input type="checkbox" name="district[]" value="1"> District 1
<input type="checkbox" name="district[]" value="2"> District 2
<input type="checkbox" name="district[]" value="3"> District 3
...
<input type="checkbox" name="district[]" value="50"> District 50
<button type="submit">Submit</button>
</form>
提交表单后,我的链接采用这种格式,这对我来说已经足够了。
category,5,some-category-name.html?district%5B%5D=20&district%5B%5D=21&district%5B%5D=4&district%5B%5D=25
但是,我无法使用PHP访问这些值。 $ _GET数组只包含类别id,它由.htaccess
传递为什么其余部分无法识别为GET数据?
答案 0 :(得分:0)
尝试在您的规则中添加QSA
QueryStringAppend标志:
RewriteRule ^category,([^-]*),([a-zA-Z0- 9]*).html$ category.php?id=$1 [QSA]
QSA用于组合新旧查询蜇。由于您的规则的目标已经有一个查询字符串id=
,当QSA不存在时,您的新查询字符串将被mod-rewrite丢弃。
来自Apache手册:
当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]
标志会导致组合查询字符串。
请考虑以下规则:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [ QSA ]
使用[QSA]
标记,/pages/123?one=two
的请求将映射到/page.php?page=123&one=two
。如果没有[QSA]
标志,则相同的请求将映射到/page.php?page=123
- 也就是说,现有的查询字符串将被丢弃。