编写.htaccess规则:忽略最后斜杠后内容,加载指定test.*文件
问题描述
我在每个文件夹中都存放着一个名为test.*的文件(*代表jpg、png、视频文件等格式),存储路径示例:
/images/1500/01/100/test.jpg/images/1500/01/500/test.jpg/images/1500/01/900/test.jpg/images/1500/01/1800/test.jpg
希望通过以下形式的链接加载对应文件:
/images/1500/01/100/images/1500/01/100//images/1500/01/100/whatever/images/1500/01/100/somethingelse
核心需求:始终加载对应文件夹下的test文件,链接中无需写出test,且允许末尾斜杠后添加任意内容。请问仅通过.htaccess能否实现?
我曾尝试以下规则,但未达到预期效果:
RewriteEngine On RewriteRule ^images/(.*)/([^/]+) images/$1/$2/test.jpg
解决方案
可以通过.htaccess实现该需求,你之前的规则存在两个问题:一是未覆盖所有请求场景(比如带末尾斜杠、斜杠后带额外内容的情况),二是仅固定了jpg后缀,无法适配其他格式的test文件。
以下是适配所有场景的规则:
RewriteEngine On # 匹配不带末尾斜杠的请求(如 /images/1500/01/100) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^images/(.+)/([^/]+)$ images/$1/$2/test [L] # 匹配带末尾斜杠或斜杠后有任意内容的请求(如 /images/1500/01/100/ 或 /images/1500/01/100/xxx) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^images/(.+)/([^/]+)/.*$ images/$1/$2/test [L]
规则解释:
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d:仅对不存在的文件或目录执行重写,避免影响真实存在的资源。- 第一条规则处理无末尾斜杠的请求,将其重定向到对应文件夹下的
test文件,Apache会自动尝试匹配test的各种后缀(如test.jpg、test.png等)。 - 第二条规则处理带末尾斜杠或斜杠后有额外内容的请求,同样重写到目标
test文件。
如果只需要适配特定后缀(比如仅jpg),只需将规则中的test替换为test.jpg即可。
内容的提问来源于stack exchange,提问作者user3358102
相关产品推荐
相关产品推荐

