(ISAPI_Rewrite) Перезаписать домен при запросе определенного файла

Я пытаюсь создать условие для перезаписи URL-адреса из http://subdomain.example.com/foo/foofile.txt на http://example.com/foo/foofile.txt когда в запросе есть файл foo/foofile.txt. Если бы кто-то мог указать мне правильное направление, я был бы признателен за любую помощь...

Заранее спасибо, Б


person bflemi3    schedule 21.02.2011    source источник


Ответы (1)


Это перенаправление определенного поддомена на основной домен для определенного файла.

Какую версию isapi_rewrite вы используете, v2 или v3?

Это предполагает v3:

RewriteCond %{HTTP:Host} ^subdomain\.(.*)$
RewriteRule ^(/foo/foofile3\.txt)$ http://%1$1 [NC,R=301]

RewriteCond проверяет хост, начинающийся с поддомена (и точки), и фиксирует оставшиеся (example.com) для удобства в правиле перезаписи. Вы также можете указать конкретный example.com, но это сделает его более общим.

Затем RewriteRule ищет конкретный файл /foo/foofile3.txt и фиксирует его (опять же для удобства, чтобы не повторять его в правиле). Результат имеет %1 для захвата в условии (example.com) и $1 для захвата в правиле (/foo/foofile3.txt).

NC не чувствителен к регистру, R=301 — это постоянное перенаправление.

В версии 3 параметры строки запроса обрабатываются автоматически, поэтому все, что находится после файла, сохраняется.

Другие возможности, которые делают его немного более сложным, — это вообще любой поддомен или шаблоны имен файлов вместо одного конкретного файла.

У меня были проблемы с кэшированием браузером моих попыток при правильном выполнении правила. Поэтому, несмотря на то, что я изменил правило, браузер закешировал мою предыдущую переадресацию. Мое быстрое решение состояло в том, чтобы подсчитать имя файла для новых URL-адресов: foofile2, foofile3 (думаю, я получил это с 3-й попытки...). Я мог бы каждый раз очищать кеш браузера; это было быстрее.

person goodeye    schedule 24.07.2011