htaccess中的查询字符串导致404错误

时间:2014-12-18 03:10:26

标签: javascript .htaccess mod-rewrite web http-status-code-404

目标是重定向查询字符串,例如:

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

请帮助谢谢!

1 个答案:

答案 0 :(得分:1)

是的,您无法在RewriteRule中匹配QUERY_STRING。请改用RewriteCond并修复正则表达式:

RewriteCond %{QUERY_STRING} (?:^|&)z=([^&]+) [NC]
RewriteRule ^(sheet\.csv)/?$ /chart/%1/$1? [NC,L,R=302]

确保此规则放在其他规则之前。