我很难找到要搜索的具体答案。 我主要使用的是制作漂亮的网址。在大多数情况下,当我知道url必须包含的变量数量时,例如,我可以使它起作用:
原始网址:
square.png
htaccess:
index.php?lang=en&show=contact-us
新网址:
RewriteRule ^([a-z]+)/([a-z-]+)$ index.php?lang=$1&show=$2 [NC,L]
对于“已知变量数量”,我有多个,我将向您展示另一个示例:
原始网址:
/en/contact-us
htacces:
index.php?lang=en&show=for-rent-details&object=8500479
新网址:
RewriteRule ^([a-z]+)/for-rent/([0-9]+)/([0-9a-z-]+)$ index.php?lang=$1&show=for-rent-details&id=$2&name=$3 [NC]
但是现在的问题是用户何时进行搜索。这意味着将根据客户选择的项目数量来组成url。默认情况下,有5个变量:
原始网址:
/en/for-rent/8500479/rocha-tower-14e
htaccess:
index.php?lang=en&show=filter&beachDistance=500&roomQty=2&sortRent=asc
新网址:
RewriteRule ^([a-z]+)/([a-z-]+)/([0-9]+)/([0-9]+)/([a-z]+)$ index.php?lang=$1&show=$2&beachDistance=$3&roomQty=$4&sortRent=$5 [NC]
这是搜索功能的“默认”网址格式。如果用户未选择任何内容,则这些是默认变量以及发送的相应值。但是,如果用户想要选择一些其他信息(城市或景点),那么它们将像这样显示:
工作网址:
/en/filter/500/2/asc
我希望它是:
index.php?lang=en&show=filter&poi-1=1&poi-3=3&beachDistance=500&roomQty=2&sortRent=asc
而另一个搜索可能具有:
/en/filter/1/3/500/2/asc
,可能还有另一个具有以下变量的
:/en/filter/1/3/44/13/90/500/2/asc
这就是我所说的未知的“变量数量”的含义,即htaccess不能确切知道数量,但是无论如何我仍然希望它重写URL。我已经阅读了有关QSA标志规则的信息,但是我不确定如何执行它。
答案 0 :(得分:1)
如果不知道变量的数量,就无法知道将什么值传递给什么变量。您可以使用外部程序探索RewriteMap
来处理php脚本中的重写,但是此时您可以直接在控制器中进行。
您可以做的是“修饰”部分网址,并传递其余的查询参数,因为您建议的结果网址不太友好并且组合太多,为此您可以使用{{1} }。这就是标记的作用,将原始查询字符串传递到新的url。
使用以下规则:
QSA
然后根据请求RewriteRule ^([a-z]+)/([a-z-]+)$ index.php?lang=$1&show=$2 [QSA]
,您将获得重写的URL /en/filter/?poi-1=1&poi-3=3&beachDistance=500&roomQty=2&sortRent=asc
。
如果您未设置该标志,则apache将丢弃查询字符串,因为重写的url已经有一个。您可以检查index.php?lang=en&show=filter&poi-1=1&poi-3=3&beachDistance=500&roomQty=2&sortRent=asc
标志here的行为。
此规则将与您当前的两参数规则冲突,因此您可以删除现有规则,也可以将新规则移到开头并使其更加具体,从而仅适用于搜索页面:
QS*