Перезапись URL / субдомена (htaccess) - PullRequest
9 голосов
/ 14 декабря 2010

Скажите, у меня есть следующий файл:

http://www.example.com/images/folder/image.jpg

Я хочу подать его на

http://s1.example.com/folder/image.jpg

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

Как, например, я делаю поддомен s1.example.com, а затем на этом поддомене я добавляю правило htaccess, чтобы указать любые файлы, чтобы получить его из http://www.example.com/images/

Служат ли файлы, обслуживающие файлы, таким образом, служить содержимым с домена без файлов cookie?

Ответы [ 4 ]

18 голосов
/ 23 февраля 2011

Сначала позвольте мне немного рассказать о концепции доменов без файлов cookie. Обычно при запросе чего-либо через http любые соответствующие куки отправляются вместе с запросом. Файлы cookie зависят от того, с какого домена они пришли. Идея использования домена без файлов cookie заключается в том, что вы перемещаете статический контент, который не использует файлы cookie, например изображения, в отдельный домен, чтобы файлы cookie не отправлялись с этим запросом. Это отсекает небольшое количество трафика.

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

Также следует иметь в виду, что файлы cookie, установленные для example.com, также будут отправляться с запросами на s1.example.com, так как "s1." является поддоменом для example.com. Вам нужно использовать www. (или любой другой поддомен по вашему выбору), чтобы разделить пространства файлов cookie.

Во-вторых , если вы решите, что домен без файлов cookie действительно стоит попробовать, давайте поговорим о реализации.

Решение Шихара плохо ! Хотя решение, кажется, работает на поверхности, на самом деле оно отрицает цель использования домена без файлов cookie. Для каждого изображения сначала пробуется URL s1.. URL s1. затем перенаправляет на домен www., который запускает второй http-запрос. Это потеря, независимо от того, как вы на это смотрите. Что вам нужно, это rewrite , который изменяет URL-адрес внутри веб-сервера, даже если браузер этого не понимает.

Для простоты я предполагаю, что все домены указывают на один и тот же каталог, так что www.example.com/something = example.com/something = s1.example.com/something = blub.example.com/something. Это упрощает задачу, если вам действительно необходимо физически хранить изображения в «www.example.com/images».

Я бы порекомендовал .htaccess, который выглядит примерно так:

# Turn on rewrites
RewriteEngine On

# Rewrite all requests for images from s1, so they are fetched from the right place
RewriteCond %{HTTP_HOST} ^s1\.example\.com
# Prevent an endless loop from ever happening
RewriteCond %{REQUEST_URI} !^/images
RewriteRule (.+) /images/$1 [L]

# Redirect http://s1.example.com/ to the main page (in case a user tries it)
RewriteCond %{HTTP_HOST} ^s1\.example\.com
RewriteRule ^$ http://www.example.com/ [R=301,L]

# Redirect all requests with other subdomains, or without a subdomain to www.
# Eg, blub.example.com/something -> www.example.com/something
#     example.com/something      -> www.example.com/something
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} !^s1\.example\.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Place any additional rewrites below.
1 голос
/ 03 октября 2011

Просто для общей информации людей, которые, как и я, могут исследовать преимущества этого. Из того, что я читаю, это не только сокращение накладных расходов на удаление файлов cookie, отправляемых с http-запросами. По-видимому, многие браузеры ограничивают максимальное количество одновременных подключений до 1 домена / сервера. Таким образом, если у вас есть отдельный домен на сервере diff, вы удваиваете его до 12. Это на мой взгляд может показаться основным потенциалом для серьезного увеличения скорости.

Хотя в любом случае, если я правильно понимаю. Другой домен, обслуживающий статический контент, должен быть расположен на другом сервере из основного домена. На самом деле имеет смысл, заядлый пользователь Firefox и твикер. Когда вы проверяете настройки about: config в Firefox, максимальное количество подключений на сервер по умолчанию устанавливается равным 6. Человек может вручную увеличить его максимум до 8. Но большинство пользователей Firefox, вероятно, не тратят достаточно времени на ознакомление с тем, как модифицировать браузер, и оставляют его по умолчанию максимум 6.

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

1 голос
/ 22 февраля 2011

Если вы хотите перенаправить трафик с www.example.com на s1.example.com, используйте следующий htaccess на www.example.com

RewriteCond %{HTTP_HOST} ^(s1\.example\.com)
RewriteRule (.*) http://www.example.com%{REQUEST_URI}[R=301,NC,L]

Если это не то, что вы ищете, уточните вопрос дальше.

0 голосов
/ 14 октября 2011

Я думаю, что у вас это может быть задом наперед (или, возможно, у меня). Для пояснения: если вы используете поддомен без файлов cookie и базовый URL-адрес которого равен www., по крайней мере, в этом случае файлы cookie установлены на www, например: основным установщиком файлов cookie является Google Analytics, поэтому при Их скрипт на моем сайте выглядит так:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'analytics-acc-#],
['_setDomainName', '[www.valpocreative.com][1]'],
['_trackPageview']);

Здесь вы видите, что я установил свой основной домен на www, исправьте меня, если я ошибаюсь в моем случае, мне нужно будет перенаправить www на поддомен не www, а не наоборот. Это также установка cname, выполненная на моем cpanel (cname= "cdn", указывающем на www.domain.com)

...