我有这些重写。第一个(用于画廊)按预期工作。第二个(用于照片)有效,但查询字符串重复。所以它转发到:http ://www.domain.com/photo-TheID?id=TheID
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /gallery\.php\?set=([^/]*)\ HTTP/
RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /photo\.php\?id=([^/]*)\ HTTP/
RewriteRule ^photo\.php$ http://www.domain.com/photo-%1 [R=301,L]
但是,如果我添加 ? 到重写的结尾
RewriteRule ^photo\.php$ http://www.domain.com/photo-%1? [R=301,L]
然后它按预期工作转发到: http: //www.domain.com/photo-TheID
我的问题是为什么在没有“?”的情况下重复该查询字符串?在末尾?我很困惑,因为第一次重写(对于画廊)没有?但它不会重复查询字符串。如果我添加 ? 在画廊重写的末尾,它将“%3f”添加到 URL 的末尾。