我在重写映射中有数百个 URL 重定向/重写的列表。大多数 URL 包含与重写映射中的特定条目匹配的查询字符串。我发现了这个关于如何将查询字符串传递到重写映射中的问题。我得到了这个工作正常,但现在的问题是现有的查询字符串被附加到重写 URL 的末尾。例如:
Expected Rewrite:
/subdir/dir.cfm?categoryID=123 -> https://example.com/subdir/endurl
Actual Rewrite:
https://example.com/subdir/endurl?categoryID=123
Expected Rewrite
/subdir/dir.cfm?videoID=3422424-131FDDFD-234 -> https://example.com/subdir/awesome/stuff
Actual Rewrite:
https://example.com/subdir/awesome/stuff?videoID=3422424-131FDDFD-234
这是我的重写规则:
RewriteEngine on
RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,R=301,L]
重写后如何删除附加到 URL 的查询字符串?
编辑
我实际上可以使用这个来完成这个工作:
RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,C]
RewriteRule (.*) $1? [L,R=301]
但是我不确定是否有人知道更好的方法来完成我正在做的事情?我认为如果我必须将包含查询字符串的 URL 重定向到另一个包含查询字符串的 URL,这可能会中断。