为什么RewriteRule不适用?

时间:2014-01-16 09:37:38

标签: php apache .htaccess mod-rewrite

好的,我知道这是一个经常被问到的问题,我看了相关的问题,但没有运气,所以我会问它。

我正在编写一个文件交换服务,我保留上传的文件存储在服务器上,名称由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框架一致。

1 个答案:

答案 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]