2011-12-09 2 views
1

Я не знаю, где я поступил не так, но я вообще пытаюсь написать файл .htaccess, который будет перенаправлять все файлы, которые заканчиваются на .tsv на .txt, вместо этого , (Я не знаю, почему, но мое расширение настаивает на переименование файла обратно. И это нормально, так как это требует другой программы выборки.)Использование .htaccess для практически переименования расширения файла файла

Вот мой файл

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

Теперь файлы находятся в каталог /googlebase/, и это каталог, в котором мне нужен такой переименование, поэтому я знаю, что не помещаю этот код в файл .htaccess в каталоге /, но по какой-то причине мой браузер игнорирует .htaccess файл в каталоге /googlebase/ и настаивать на перенаправлении на страницу 404.

Может ли кто-нибудь помочь? Я видел код, подобный этой работе при переименовании .php в .html и ссылку, поэтому я решил, что она должна работать независимо. Файл, который заканчивается на .tsv, существует, но я хочу, чтобы любой, кто пытается получить файл .tsv, был загружен в файл .txt.

ответ

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 был другой путь вокруг, вас могут просто изменить их в условиях/правилах.


Edit:

Я думаю, что главная проблема с тем, что у вас было то, что вы были проверены -f по запросу с .txt приложенном к концу. Поэтому, когда кто-то запрашивает «/googlebase/foo.txt», вы проверяли, существует ли файл «/googlebase/foo.txt.txt». Код, где я соответствует (. +). TSV, а затем использовать % 1 как обратная ссылка является только Foo часть запроса (% 1 = Foo), так что можно присоединять к .txt end, когда я проверяю, существует ли файл.

+0

Это работает отлично! Я пытался его получить, чтобы любой вызов файла, который заканчивается на .txt, был перезаписан как .tsv. И, очевидно, не переписывать URL-адрес файла, который заканчивается на .tsv, если он действительно существует. Это прекрасно работает. –

+0

Я что-то неправильно ввел, когда я изначально попробовал? –

+0

см. Мое редактирование в ответе –

Смежные вопросы