.htaccess php一个带有多个复选框的常量值

时间:2018-02-25 12:09:35

标签: php .htaccess

我有一个分配给特定类别的项目列表,我想根据这些区域过滤它们。

我当前的网址如下所示:

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数据?

1 个答案:

答案 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 - 也就是说,现有的查询字符串将被丢弃。