5

我不明白为什么我总是在重写规则方面遇到如此大的问题,但我只想附加到查询字符串(如果它存在)并添加一个?如果它不存在。我实际上并不关心浏览器中的 URL 是否更改——它只需要加载正确的目标页面。

RewriteRule /cia16(.*)\?(.*) /cia$1?$2&CIA=16
RewriteRule /cia16(.*) /cia/$1?CIA=16

如果我去/cia16/steps.php?page=1它实际上会被重写/cia/steps.php?CIA=16——也就是说,出于重写的目的,它似乎接受了查询字符串部分甚至不被视为 URL 的一部分。

我必须做什么才能使重写与现有的查询字符串一起正常工作?

4

1 回答 1

15

您无法匹配 a 中的查询字符串RewriteRule,您需要匹配 a 中的%{QUERY_STRING}变量RewriteCond。但是,如果您只想附加查询字符串,则可以使用该QSA标志:

RewriteRule /cia16(.*) /cia/$1?CIA=16 [QSA]

URI:/cia16/steps.php?page=1将被重写为/cia/steps.php?CIA=16&page=1. 如果由于某种原因,您需要在page=1 之前CIA=16那么您可以执行以下操作:

RewriteRule /cia16(.*) /cia/$1?%{QUERY_STRING}&CIA=16
于 2013-04-11T00:05:30.783 回答