Виртуальный субдомены с помощью .htaccess. «Поплыли» относительные пути к файлам. Как решить проблему? Есть домен вида domain.com и есть языковые версии вида ru.domains.com С помощью .htaccess написал конструкцию которая бы передавала параметр языка: Например запрос: ru.domains.com/index.php?page=1 Переводится в: domains.com/index.php?page=1&lang=ru Проблема состоит в том, что при загрузке страницы ru.domains.com/index.php?page=1 не загружаются стили, картинки и т.д. Все ссылки работают без проблем. Попробовал использовать тег base href, но он нестабильно работает с IE. Использую «Денвер». Подскажите, как решить задачу? 2 день сижу в интернете. Не могу нащупать что не так ))
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн В .htaccess следующие правила: RewriteCond %{HTTP_HOST} ^([^\.]+)\.domains\.ru$ [NC] RewriteCond %{HTTP_HOST} !^www\.domains\.ru$ [NC] RewriteRule ^(.*)$ index.php?lang=%1 [L,QSA] Параметр передается, текстовый контент грузится, но оформление все слетает.. Помогите найти решение!
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн а оформление динамически генерируется или статика лежит? и как выглядят ссылки на элементы оформления?
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн оформление - статика. ссылки на элементы оформления: <link rel="stylesheet" href="/pub/css/style.css" media="screen, projection" /> Ссылки на картинки: <a href="" style="background-image:url(/files/8aa7424319b3045d9cd6efc60fc600b3mini.jpg)"></a
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн попробуйте перед своими правилами добавить: Код (Text): RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L]
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн Помогло. Огромное спасибо! Я думаю это многим пригодится, т.к. в интернете за 3 дня ничего такого найти не удалось. Пожалуйста, напишите еще смысл записи, чтобы я (и думаю многие) поняли механизм действия. Я так и знал, что решение должно быть очень простым ))) и в то же время сложным с точки зрения понимания работы с .htaccess.
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн когда я начинал работать с реврайтом были доступны только официальные документации, причем тупо растиражированные. примеров было мало, вопросники были еще не популярны. приходилось методом высоконаучного тыка сидеть подбирать правильные правила. поэтому я по сей день стараюсь по возможности помогать другим =) приходящий от браузера запрос сначала обрабатывается механизмом алиасов или к нему просто добавляется значение document_root. таким образом Apache образует полную ссылку на запрашиваемый объект для своей файловой системы. проверка %{REQUEST_FILENAME} -f тестирует полученный путь к файлу на существование файла на диске. если такой существует то выполняется правило . - с флагом L что по сути означает для любого адреса ни делать ничего и это последнее правило для данного набора. пройдемся по вашим правилам: RewriteCond %{HTTP_HOST} ^([^\.]+)\.domains\.ru$ [NC] RewriteCond %{HTTP_HOST} !^www\.domains\.ru$ [NC] RewriteRule ^(.*)$ index.php?lang=%1 [L,QSA] в них первой строкой вы тестируете по шаблону домен третьего уровня без учета регистра. кстати, почему шаблон [^\.?]+ - "все кроме точки один и более символов"? покажите мне как будет слово любовь на языке 123@#&*-%. =) языковой код может быть только символьным RU/EN и тд или содержать минус "-" при разделении диалекта ru-RU/en-GB/en-US и тд. всё, других символов не будет. в данном случае вполне достаточно [a-z]+ второй строкой вы дополняете к проверке условие "не является доменом WWW" с логикой И третьей строкой вы собственно совершаете операцию перезаписи запроса. при этом вы работаете именно со входящим адресом. вам не важно, существует такой файл или нет. под шаблон .* попадает любая последовательность символов, пришедшая от браузера (в данном случае), поэтому будет выполнена переадресация к index.php, которому мы подставим взятый в первой строке "домен" (%1), оригинальную строку GET-запроса (QSA) и это будет последним правилом. не совсем ясно зачем вы объявляете именно шаблон. значение-то вы никуда не передаете =) достаточно просто точку оставить как в моем правиле: RewriteRule . index.php?lang=%1 [L,QSA] Добавлено спустя 1 минуту 49 секунд: Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» относит это не htaccess, это mod_rewrite =). да, его можно объявлять на уровне каталога, но я предпочитаю делать так только временно а на рабочих серверах эти правила помещаются в конфигурацию Apache
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн Большое спасибо! Еще один вопрос )) Какое правило мне написать, чтобы параметр передавался для всех страниц, не только для index.php? Например, есть страницы что-то вроде www.sub.domains.ru/script.php?id=8&name=ok
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн не понял вопроса. если script.php существует и именно ему нужно параметры передать то добавьте QSA в мое правило. если его не существует то оно будет преобразовано вашим правилом в index.php?lang=%1 и тут же QSA дополнит это строкой &id=8&nade=ok
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн script.php существует и именно ему нужно передать параметры. вообще много скриптов существует. то есть задача состоит в том, чтобы всем выполняем скриптам на сайте передавался параметр ?lang=%1
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн переменные окружения тогда используйте. по идее хватит вообще 4 строк: Код (Text): RewriteCond %{HTTP_HOST} ^([^\.]+)\.domains\.ru$ [NC] RewriteCond %{HTTP_HOST} !^www\.domains\.ru$ [NC] RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L,QSA,E=DOMAIN_LANG:%1]
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн DOMAIN_LANG - переменная окружения? это не совсем то, что нужно. Мне надо реализовать передачу любого произвольного параметра всем скриптам через название домена 3 уровня, допустим: ?param=idparam
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн DOMAIN_LANG переменная окружения, будет видна в любом скрипте. не вижу проблемы передавать этим скриптам любой набора GET-параметров.
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн Имеем следующий домен 3 уровня: http://param.domains.ru сейчас param передается скрипту index.php, если переходим по адресу: http://param.domains.ru а если мы перейдем, например, http://param.domains.ru/script.php?id=77, то param не передается скрипту script.php. Вместо script.php может быть любой другой скрипт (их много).
давайте так. вы некорректно описали задачу которая кроется у вас в голове. я понял задачу как необходимость получать из 3rdLD значение переменной lang и она должна быть видима любому скрипту вашего движка. config: Код (Text): RewriteEngine On RewriteCond %{HTTP_HOST} ^([a-z]+)\.domains\.ru [NC] RewriteCond %{HTTP_HOST} !^www\.domains\.ru [NC] RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [QSA,E=DOMAIN_LANG:%1] абсолютно-любой-скрипт.php Код (PHP): <?php header('Content-Type: text/plain'); $lang = isset( $_SERVER ) && isset( $_SERVER['DOMAIN_LANG'] ) ? trim( $_SERVER['DOMAIN_LANG'] ) : 'ru'; var_dump( $_GET, $lang ); ?> http://www.domains.ru/абсолютно-любой-скрипт.php -> Код (Text): array(0) { } string(2) "ru" en.domains.ru/абсолютно-любой-скрипт.php -> Код (Text): array(0) { } string(2) "en" http://www.domains.ru/абсолютно-любой-скрипт.php?olo=1 -> Код (Text): array(1) { ["olo"]=> string(1) "1" } string(2) "ru" es.domains.ru/абсолютно-любой-скрипт.php?foo=1&bar=2&lang=ru -> Код (Text): array(3) { ["foo"]=> string(1) "1" ["bar"]=> string(1) "2" ["lang"]=> string(2) "ru" } string(2) "es" работает корректно, следовательно решает задачу в том виде, в котором её понял я.
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн Да, Вы правы. Запутал я Вас с этим языком ))
Re: Виртуальный субдомены с помощью .htaccess. «Поплыли» отн вы внимательно прочитали мое предыдущее сообщение? там указаны правила и содержимое тестового скрипта. а еще наглядно показано, как это работает. судя по тому что вы рассказали только что - это и есть ваше решение. интегрируйте его в ваши скрипты и удачи))))