htaccess 中的查询字符串会导致 404 错误
Query string in htaccess results in 404 error
目标是重定向查询字符串,例如:
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]
确保将此规则放在其他规则之前。
相关文章:
- 将字符串拆分为数组时出现JavaScript错误
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 如何在不创建格式错误的HTML标记的情况下分解字符串
- 如何使用promise正确处理express.js中的错误(字符串或对象)
- 未捕获的类型错误:字符串不是函数
- 错误=字符串.$variable - 失败
- 未捕获的引用错误: 字符串未定义客户端模板.js?rev=J%2BGzwlHEWSv11%2BqD9XeOaw%3D%3
- 未捕获的类型错误:字符串不是函数
- 可以通过主干集合查看错误字符串不是函数
- 使用正则表达式替换XML属性内错误字符串中的嵌套引号
- 抛出新的错误(字符串)不显示在F12
- Json数组中返回错误字符串
- Jquery:使用字符串作为函数(错误:字符串不是函数)
- 如何从没有第一个元素的json对象返回错误字符串
- 从jQuery Ajax调用中获取错误字符串
- 未捕获的类型错误:字符串不是函数,并且没有同名的函数
- 错误:字符串文字未终止
- Chrome在JS控制台上给了我一个错误:“未捕获的无效字符错误:字符串包含无效字符
- javascript语法错误:字符串文字未终止