【发布时间】:2014-01-16 20:22:55
【问题描述】:
好的,我知道这是一个非常常见的问题,我已经查看了相关问题但没有运气,所以我要问它。
我正在编写一个文件交换服务,我将上传的文件保存在服务器上,其名称由 md5() 函数编码(存在一些编码问题,所以我决定像这样存储它们),我有他们真实的数据库中的名称。显然,我希望用户能够下载具有原始名称的文件。我提供没有任何 php 的文件,只提供带有文件路径的链接。我知道浏览器通过获取其 URL 的最后一部分(即最后一个“/”之后的内容)为下载的文件分配名称。我的计划是提供这样的链接
uploads/0/150/326ac5f4bb70bae757d2b72d77cd5d43.jpg/original_Name.jpg
这样浏览器就会采用最后一个“/”(“original_Name.jpg”)之后的内容,并将这个名称赋予下载文件。但我希望它实际上下载真实存在的文件:
uploads/0/150/326ac5f4bb70bae757d2b72d77cd5d43.jpg
我认为我可以通过在我的 .htaccess 中添加一个简单的 RewriteRule 来实现这一点,所以我写道:
RewriteEngine On
RewriteRule uploads/(.+)/.*$ uploads/$1
但它不起作用。我不断收到此 FILE NOT FOUND 错误: 在此服务器上找不到请求的 URL /uploads/0/151/f7e18efaed5fc1cd13e59e77824f2806.jpg/1372903471104.jpg。
显然它根本没有被重写。有什么建议么?
附:我在 httpd.conf apache 配置文件中得到了 AllowOverride All。 附言这是我的 .htaccess 文件的全部内容,以防其中的某些内容会以某种方式影响我的情况:
AddDefaultCharset utf-8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
RewriteRule uploads/(.+)/.*$ uploads/$1
php_value memory_limit 512M
其他 RewriteRule 及其 RewriteCond 不是由我编写的,它与我在这个项目中使用的 Slim 框架一起使用。
【问题讨论】:
-
你检查过你的 Apache rewrite_module 是否开启了吗?
标签: php apache .htaccess mod-rewrite