重写以附加到查询字符串

时间:2013-04-10 23:59:07

标签: apache .htaccess mod-rewrite

我不明白为什么我总是会遇到重写规则这么大的问题,但我只想附加查询字符串(如果它存在)并添加?(如果不存在)。我实际上并不关心是否在浏览器中更改了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的一部分。

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

1 个答案:

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