.htaccess 为什么在重写URL中重复查询字符串?

.htaccess 为什么在重写URL中重复查询字符串?,.htaccess,rewrite,query-string,.htaccess,Rewrite,Query String,我有这些重写。第一个(对于画廊)的效果与预期一致。第二个(用于照片)有效,但查询字符串重复。因此,它提出: 不过,如果我补充一点?直到制定规则的最后一刻 RewriteRule ^photo\.php$ http://www.domain.com/photo-%1? [R=301,L] 然后按预期工作,转发至: 我的问题是,为什么查询字符串在结尾没有“?”的情况下重复?这让我很困惑,因为第一次重写(对于gallery)时没有?但它不会重复查询字符串。如果我加上?在库重写规则的末尾,它会将“%3

我有这些重写。第一个(对于画廊)的效果与预期一致。第二个(用于照片)有效,但查询字符串重复。因此,它提出:

不过,如果我补充一点?直到制定规则的最后一刻

RewriteRule ^photo\.php$ http://www.domain.com/photo-%1? [R=301,L]
然后按预期工作,转发至:


我的问题是,为什么查询字符串在结尾没有“?”的情况下重复?这让我很困惑,因为第一次重写(对于gallery)时没有?但它不会重复查询字符串。如果我加上?在库重写规则的末尾,它会将“%3f”添加到url的末尾。

因为它会自动追加,除非您在替换url中放置一个尾随问号,前提是它不包含新的查询字符串

“当您想要删除现有的查询字符串时,在替换字符串的末尾只加一个问号”

检查此Apache链接中的标题

你的问题:

这让我很困惑,因为第一次重写(对于gallery)时没有

原因是第一条重写规则:

RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 
创建一个新的查询字符串,在这种情况下,除非使用QSA标志显式执行,否则不会自动追加传入查询字符串

RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1