.htaccess漂亮的URL未知数量的变量

时间:2018-10-06 20:17:48

标签: php .htaccess url-rewriting

我很难找到要搜索的具体答案。 我主要使用的是制作漂亮的网址。在大多数情况下,当我知道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标志规则的信息,但是我不确定如何执行它。

1 个答案:

答案 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*