htaccess RewriteRule匹配含斜杠的乐队名返回404如何解决?
问题原因
你当前使用的正则规则里,[^/]*代表匹配0个或多个非斜杠字符,当乐队名中包含/时,正则匹配会直接中断,因此返回404错误。
解决方案
直接调整正则匹配规则,捕获bands/路径后所有的内容,同时添加B标志对特殊字符做URL编码,避免参数传递时出现解析异常:
RewriteRule ^bands/(.+)$ /folder/index.php?palabra=$1 [B,L]
修改后ac/dc这类携带斜杠的乐队名就可以被正常捕获,PHP侧通过$_GET['palabra']获取参数时会自动解码为原始的乐队名称,无需额外处理。
可选优化
如果你的站点bands/路径下存在真实的静态文件、文件夹,可以在规则前增加两条判断条件,避免重写规则覆盖真实资源的访问:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^bands/(.+)$ /folder/index.php?palabra=$1 [B,L]
内容的提问来源于stack exchange,提问作者Ricardo Mehr
相关产品推荐
相关产品推荐

