我有一个.htaccess文件,它像这样重定向URL:
RewriteRule ^companies/([0-9]{1,20})/(.*)/?$ /php/company-profile.php?id=$1 [NC,L]
它匹配 URL "companies/12345/company-name-safe"并获取公司简介的唯一 id.php。
这很好用。但我在页面上列出了该公司的工作列表,该列表具有分页和order_by功能。
所以我还需要捕获任何额外的 URL 参数并传递给 php 文件。
例如,对于网址:companies/12345/company-name?page=2&order_by=date+DESC
如果可能的话,我不想改变我的 URL 结构,我总是希望第 1 页是一个干净的 URL,末尾没有"?id=12345"。
我该怎么做?
您只需在规则中添加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
.
仅当查询字符串参数在规则中具有相同的名称时,上述解决方案才有效。否则,您可以使用%{QUERY_STRING}
上的RewriteCond
单独捕获它们,然后手动将它们附加到规则中,例如:
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
标志