编辑:以更一般的方式提出相同的问题:如何在 htaccess 中重写 URL,以便在 php 中看到重写的表单$_SERVER['REQUEST_URI']
?
如果用户通过 URL 请求(现有)epub 或 mobi 文件,我想捕获并重定向请求,以便 Flight php 路由器将通过其路由之一处理它。(为了记录下载次数。)所以,请求
http://example.com/book.epub
应该改写为
http://example.com/download/epub
然后应该将其馈送到路由器,就好像它是原始请求一样。这是不起作用的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# not using [L] flag, so that the modified request gets handled later
# for book.epub this rule should produce /download/epub etc.
RewriteRule ^book\.(epub|mobi)$ /download/$1 [QSA]
# Flight rewrite rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
问题 #1是现有 REQUEST_FILENAME 的测试仍然成功(它检查原始请求,而不是重写的表单)。但是测试必须保留,当然,这样对图像、css 和其他常规“资产”的请求就不会被转发到路由器。
但是,也存在问题 #2:即使请求的文件实际上不存在,Flight 仍然无法看到重写的 URL。在内部,它查看$_SERVER['REQUEST_URI']
,因此它看不到请求的重写形式。我正在努力实现的目标是可能的吗?(也许使用不同的路由器?)