将QUERY_STRING参数与htaccess中的正则表达式匹配参数合并

时间:2016-01-16 23:31:54

标签: php .htaccess

我有一个.htaccess文件正在重定向URL,如下所示:

RewriteRule    ^companies/([0-9]{1,20})/(.*)/?$    /php/company-profile.php?id=$1    [NC,L]

匹配网址' companies / 12345 / company-name-safe'并获取company-profile.php的唯一ID。

这很有效。但是我在页面上列出了该公司的工作列表,其中包含了分页和分页。 order_by功能。

所以我还需要捕获任何额外的URL参数并传递给php文件。

例如:url:companies / 12345 / company-name?page = 2& order_by = date + DESC

如果可能,我不想更改我的网址结构,我总是希望第1页是一个干净的网址,而不是'?id = 12345'最后。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您只需在规则中添加QSA标记

RewriteRule ^companies/([0-9]{1,20})/(.*)/?$ /php/company-profile.php?id=$1 [NC,L,QSA]

这样,将追加查询字符串。从您的示例companies/12345/company-name?page=2&order_by=date+DESC将被重写为/php-profile.php?id=12345&page=2&order_by=date+DESC

上述解决方案仅在查询字符串参数在规则中具有相同名称时才有效。否则,您可以使用RewriteCond上的%{QUERY_STRING}单独捕获它们,然后在规则中手动附加它们,例如:

RewriteCond %{QUERY_STRING} ^page=([^&]+)&order_by=([^&]+)$ [NC]
RewriteRule ^companies/([0-9]{1,20})/(.*)/?$ /php/company-profile.php?id=$1&xxx_page=%1&xxx_order_by=%2 [NC,L]  

请注意,在当前情况下,您不再需要QSA标志

相关问题