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

Query string in htaccess results in 404 error

本文关键字:错误 字符串 查询 htaccess      更新时间:2023-09-26

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

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] 

不起作用,导致 404 错误。

RewriteCond %{QUERY_STRING}     ^z=([_0-9a-z-]+)$    [NC]
RewriteRule sheet.csv chart/$1/sheet.csv [NC,L,R=301]

不起作用,导致 404 错误。

我该如何解决这个问题?


更新

该错误似乎是因为它不是重定向而是查找文件:
mydomain.com/sheet.csv不存在也永远不会存在

那么为什么它不重定向,我该如何解决它呢?


更新 2

我做了一堆试错实验。我能够让它做一些事情,只需要完成它的工作。

如果我这样做:

RewriteCond %{QUERY_STRING} ^z=(['w-]+) [NC]
RewriteRule ^ charts/%1/sheet.csv? [NC,L,R=301]

然后它重定向到 URL mydomain.com/home/mydomai/public_html/mydomain/charts/abcdef/sheet.csv

尝试了我能想到的所有可能的组合,但仍然无法让它只转到 URL
mydomain.com/charts/abcdef/sheet.csv

请帮忙谢谢!

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

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

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