我在做什么:
我正在使用高级过滤器(许多复选框)创建搜索,并且我正在使用 PHP 功能,即在末尾为所有这些过滤器提供相同的名称,并带有 []。这是一个简化的示例:
(HTML)
<h3>Elements</h3>
<label><input type="checkbox" name="elementPicked[]" value="1" checked="checked" /> Fire</label>
<label><input type="checkbox" name="elementPicked[]" value="2" checked="checked" /> Water</label>
<label><input type="checkbox" name="elementPicked[]" value="3" checked="checked" /> Wind</label>
<h3>Rarity</h3>
<label><input type="checkbox" name="rarityPicked[]" value="10,11,12" /> Common</label>
<label><input type="checkbox" name="rarityPicked[]" value="19,20,21,22" /> Uncommon</label>
<label><input type="checkbox" name="rarityPicked[]" value="29,30,31,32" /> Rare</label>
<!-- (...other somethingPicked[] types, like atk, def and cost...) -->
(PHP)
if(!empty($_GET['elementPicked'])) {
foreach($_GET['elementPicked'] as $elementPicked) {
//do something with each $elementPicked
}
}
对于 mod_rewrite,目前我的重写工作如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Example: ./
RewriteRule ^index$ index.php [NC,L]
#Example: ./p/dashboard
RewriteRule ^p/([^/]*)$ index.php?z=$1 [NC,L,QSA]
这意味着如果我调用http://example.com
,它将重写为调用http://example.com/index.php
。
如果我打电话http://example.com/p/cardlist
,它会改写为打电话http://example.com/index.php?z=cardlist
。这个很简单。
所以,现在是 htaccess 问题:
对于这种形式,URL 是这样的:
http://example.com/p/carddisplay?elementPicked%5B%5D=1&elementPicked%5B%5D=2&elementPicked%5B%5D=3&rarityType=Select&rarityPicked%5B%5D=39%2C40%2C41%2C42&rarityPicked%5B%5D=49%2C50%2C51%2C52
由于是搜索并且人们稍后可能会访问相同的 url,因此 POST 不是一个选项(它不会“保存”为其他会话选择的复选框)。
我想要实现的是http://example.com/p/carddisplay/var1/something/var2/something/var3/something...
或翻译上面的示例,http://example.com/p/carddisplay/elementPicked%5B%5D/1/elementPicked%5B%5D/2/elementPicked%5B%5D/3/rarityType/Select/rarityPicked%5B%5D/39%2C40%2C41%2C42/rarityPicked%5B%5D/49%2C50%2C51%2C52
(或者如果可以删除 url 编码的 [] 也会很棒,因为它仍然丑陋得要命。欢迎任何让它更漂亮的建议)。
我在这里找到了与我想要的相反的东西-> .htaccess mod_rewrite 在 url 中有多个变量
但无论如何,我无法让它与它一起工作,因为我有不止一个var[]
. 这实际上可以通过重写来实现吗?