好的,我知道这是一个经常被问到的问题,我看了相关的问题,但没有运气,所以我会问它。
我正在编写一个文件交换服务,我保留上传的文件存储在服务器上,名称由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错误: 在此服务器上找不到请求的网址/uploads/0/151/f7e18efaed5fc1cd13e59e77824f2806.jpg/1372903471104.jpg。
显然它根本没有被重写。有什么建议?
P.S。我在httpd.conf apache配置文件中获得了AllowOverride All。 P.P.S.这是我的.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框架一致。
答案 0 :(得分:0)
试试这段代码:
AddDefaultCharset utf-8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule uploads/([^.]+\.[^/]+)/[^/]+$ uploads/$1 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]