Использование .htaccess для виртуального переименования расширения файла - PullRequest
1 голос
/ 09 декабря 2011

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

Вот мой файл

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 Ответ

1 голос
/ 09 декабря 2011

Попробуйте использовать это в файле .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 в конец, когда проверю, существует ли файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...