Использование .htaccess для обслуживания статических файлов через поддомен - PullRequest
0 голосов
/ 18 августа 2010

Хорошо, извините за мою глупость, я просмотрел множество примеров на t'interweb, но не думаю, что нашел то, что искал.

У меня есть веб-сайт,photography.example.com является основным сайтом, но я также хочу иметь другой поддомен для обслуживания статических файлов, например static.photography.example.com.

Если я запрашиваю файл (например, http://static.photography.example.com/js/jquery.js), я хочу, чтобы этот файл был получениз нестатического домена, что позволяет мне сохранить структуру файла полностью нетронутой, но я использую несколько доменов для более параллельных HTTP-запросов.

Я не хочу выбрасывать http-ответы, которые сделали бы браузерфайл был перемещен, я просто хочу отразить файлы из обычного домена в статический домен.После этого я продолжил бы устанавливать далекое будущее с истекшим сроком для улучшения кэширования и т. Д.

Как мне добиться этого, используя .htaccess?

РЕДАКТИРОВАТЬ 1

Итак, после небольшого возни я пришел к следующему:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)$ http://photography.example.com/$1 [L]

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

РЕДАКТИРОВАТЬ 2

Так что я изменил свой DNS и несколько дней ждал его распространения, нотехника CNAME тоже не работает.Вот запись:

alt text

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

В вашем вопросе вы говорите:

  1. Добавление заголовков Expire для кэширования
  2. Разделение ресурсов по доменам

Для элемента № 1 вы можете отредактировать файл httpd.conf / .htaccess на своем основном домене (это не помешает делать это на всем сайте, нет?)

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType application/x-javascript A2592000
  ExpiresByType image/gif A2592000
  ExpiresByType image/jpeg A2592000
  ExpiresByType image/png A2592000
</IfModule> 

Элемент № 2 не нуждается в настройке Apache - просто настройте запись DNS static.photography.example.com с помощью CNAME photography.example.com . Это должно сработать.

Или вы можете отредактировать ваш httpd.conf и добавить ServerAlias ​​

<VirtualHost xx.xxx.xxx.xx:80> 
DocumentRoot / 
ServerName photography.example.com 
ServerAlias static.photography.example.com 
</VirtualHost> 

Итак, пока вам не нужен отдельный виртуальный хост с выделенной конфигурацией Apache.

Вот несколько других причин, по которым вы хотите отдельный домен и отдельный виртуальный хост с выделенной конфигурацией :

Если вам нужен один из них или если ваши потребности в кешировании слишком сложны (вы не хотите кэшировать все JS / CSS / изображения, а скорее их часть), тогда ваше единственное решение: возьмите в свои руки httpd.conf и напишите отдельные конфигурации для каждого домена

0 голосов
/ 04 апреля 2015

Мое понимание вопроса: REDIRECT

http://static.photography.example.com/js/jquery.js

, чтобы получить файл по следующему адресу (без изменения URL-адреса в браузере):

http://photography.example.com/js/jquery.js

Но сохраняйте URL-адрес всех существующих файлов, например, следующий: НЕ ПЕРЕПРАВЛЕНО :

http://static.photography.example.com/images.jpg

Если это правда, тогда .htaccess должно работать:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)?.photography.example.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://photography.example.com/$1 [P]

Кроме того, вы также можете использовать MAPPING , если у вас есть сложные правила, такие как:

RewriteRule ^/file1\.js$ http://photography.example.com/file.js?q=444 [P]
RewriteRule ^/file2\.js$ http://photography.example.com/file.js?q=345 [P]
RewriteRule ^/file3\.js$ http://photography.example.com/file.js?q=999 [P]

создать текстовый документ (например, map.txt) в папке с .htaccess и поместитьв следующем:

file1   444
file2   345
file3   999

.htaccess будет выглядеть следующим образом:

# Set a variable ("map") to access map.txt from config
RewriteMap map txt:map.txt

# Use tolower function to convert string to lowercase
RewriteMap lower int:tolower

# Get requested file name
RewriteCond %{REQUEST_URI} ^/([^/.]+)\.js$ [NC]

# Seek file name in map-file
RewriteCond ${map:${lower:%1}|NOT_FOUND} !NOT_FOUND

# Perform rewriting if the record was found in map-file
RewriteRule .? http://photography.example.com/file.js?q=${map:${lower:%1}} [P]
0 голосов
/ 01 октября 2010

Я думаю, что вам понадобится запись CNAME для передачи запроса на static.photography.example.com на ваш сервер и специальных запросов анализа .htaccess для static.photography.example.com.

Добавление следующего правила перезаписи в .htaccess должно помочь

RewriteCond %{HTTP_HOST} !^(www\.)?photography.example.com$ [NC]

...