如何移除URL末尾的pdf/并确保请求全记录?附PHP解决方案
原始问题
我想通过htaccess重写移除URL末尾的“pdf/”。访问 example.net/book/pages/26-27/ 会返回PDF,但地址会变成 example.net/book/pages/26-27/pdf/。
当前的文件结构如下:
ƒ 26-27/ { index.php { <?php include callerloggerscript.php; header('Location:pdf/'); ?> } } ƒ pdf/ { .htaccess { Directory Index pages-26-27.pdf } pages-26-27.pdf }
这个结构原本是为了实现两个目标:
- 仅用文件夹名缩短URL
- 通过请求记录脚本处理所有调用
当前方案能正常运行,但直接访问26-27/pdf/时,可以获取PDF但会绕过记录脚本。我希望客户端始终显示原始URL(不含末尾的pdf/),确保所有请求都被记录。我只懂基础的htaccess知识,多次尝试重写都失败了,求可行的实现方法。
优化解决方案
原实现逻辑过于复杂,其实不需要依赖htaccess重写,直接用PHP的readfile()函数就能输出PDF,同时完美满足需求:
<?php include 'loggercode.php'; $filename = "pages-26-27.pdf"; header("Content-type: application/pdf"); header("Content-Length: " . filesize($filename)); readfile($filename); ?>
核心优势
- 完全覆盖两个核心需求:所有请求都会被记录(通过引入日志脚本),URL仅保留短文件夹名(无跳转、无重写,客户端始终显示原始路径)
- 彻底解决了原方案中直接访问
pdf/路径绕过日志记录的问题
补充提示
如果是处理大文件,建议添加额外响应头(比如禁用缓存的相关头信息),但轻量使用场景下,当前方案已经足够稳定。
内容的提问来源于stack exchange,提问作者Andante88
相关产品推荐
相关产品推荐

