使用.htaccess虚拟重命名文件的文件扩展名

时间:2011-12-09 05:26:38

标签: file .htaccess redirect

我不知道我哪里出错但我通常会尝试编写.htaccess文件,该文件会将以.tsv结尾的所有文件重定向到.txt。 (我不知道为什么,但我的扩展程序坚持重新命名文件。这很好,因为它是另一个获取程序所需的。)

这是我的档案

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.txt -f
RewriteRule ^(.*)$ $1.tsv

现在文件驻留在目录/googlebase/中,这是我需要进行这种重命名的唯一目录,所以我知道我不会将此代码放入{{{.htaccess文件中1}}目录但由于某种原因,我的浏览器忽略了/目录中的.htaccess文件,并坚持重定向到404页面。

有人可以帮忙吗?在将.php重命名为.html和链接时,我已经看到了类似这样的代码,所以我认为它应该可以正常工作。以.tsv结尾的文件存在,但我想要它,以便任何试图访问.tsv文件的人都被带到.txt文件下载。

1 个答案:

答案 0 :(得分:1)

尝试在文档根目录(/)中的.htaccess文件中使用它:

RewriteEngine On
# check that the request isn't an existing directory
RewriteCond %{REQUEST_FILENAME} !-d
# check that the request is in the googlebase directory and ends with the .tsv extension
RewriteCond %{REQUEST_URI} ^/googlebase/(.+)\.tsv$
# check if that extension was swapped with .txt, that file exists
RewriteCond %{DOCUMENT_ROOT}/googlebase/%1.txt -f
# rewrite the URI to replace .tsv with .txt
RewriteRule ^googlebase/(.+)\.tsv /googlebase/$1.txt  [L]

我可能误解了你想要做的事情,如果tsv / txt反过来,你可以在条件/规则中改变它们。


编辑:

我认为你所遇到的主要问题是你在上检查了 -f ,其中 .txt 附加到了 >。因此,当有人请求“/googlebase/foo.txt”时,系统会检查您是否存在“/googlebase/foo.txt.txt”文件。我匹配(。+)。tsv 然后使用%1 作为反向引用的代码只是请求的 foo 部分( %1 = foo),所以当我检查文件是否存在时,我可以将.txt附加到结尾。