目标是重定向查询字符串,例如:
mydomain.com/sheet.csv?z=abcdef
到其各自的文件夹,将查询字符串附加到相应文件所在的文件夹名称中,如下所示:
mydomain.com/charts/abcdef/sheet.csv
我尝试了以下操作,但我尝试的所有操作都会导致404错误。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^sheet.csv?z=([_0-9a-z-]+) /$1/sheet.csv [R]
DIDN'工作,404错误结果。
RewriteCond %{QUERY_STRING} ^z=([_0-9a-z-]+)$ [NC]
RewriteRule sheet.csv chart/$1/sheet.csv [NC,L,R=301]
DIDN'工作,404错误结果。
我该如何解决这个问题?
更新
错误似乎正在发生,因为它不是重定向,而是寻找文件:
mydomain.com/sheet.csv
不会,也永远不会存在 。
那为什么不重定向,我该如何解决?
更新2
我做了一堆试验和错误的实验。我能够做到这一点,只需要完成它的工作。
如果我这样做:
RewriteCond %{QUERY_STRING} ^z=([\w-]+) [NC]
RewriteRule ^ charts/%1/sheet.csv? [NC,L,R=301]
然后重定向到网址mydomain.com/home/mydomai/public_html/mydomain/charts/abcdef/sheet.csv
我尝试了我能想到的所有可能的组合,但仍然无法转到URL
mydomain.com/charts/abcdef/sheet.csv
请帮助谢谢!
答案 0 :(得分:1)
是的,您无法在RewriteRule
中匹配QUERY_STRING。请改用RewriteCond
并修复正则表达式:
RewriteCond %{QUERY_STRING} (?:^|&)z=([^&]+) [NC]
RewriteRule ^(sheet\.csv)/?$ /chart/%1/$1? [NC,L,R=302]
确保此规则放在其他规则之前。