我不明白为什么我总是会遇到重写规则这么大的问题,但我只想附加查询字符串(如果它存在)并添加?
(如果不存在)。我实际上并不关心是否在浏览器中更改了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的一部分。
我需要做些什么才能使重写与现有查询字符串一起正常工作?
答案 0 :(得分:11)
您无法与RewriteRule
中的查询字符串进行匹配,您需要与%{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