Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Регулярное выражение для Mod Rewrite


Автор: krundetz 1.8.2008, 10:50
В общем есть вот такие директивы в файле .htaccess

Код

RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev\.net
RewriteCond %{REQUEST_URI} !(vt_fr)/(.*)\.ivp
RewriteRule ([0-9A-Za-z-_\s]+)\.ivp$ http://www.hotel-chebotarev.net/vt_fr/$1.ivp [R]
RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev\.ru
RewriteCond %{REQUEST_URI} !(vt_ru)/(.*)\.ivp
RewriteRule ([0-9A-Za-z-_\s]+)\.ivp$ http://www.hotel-chebotarev.ru/vt_ru/$1.ivp [R]


на третьем денвере абсолютно спокойно работают так как надо
пренес на сервер и началось сначало он вообще не захотели отрабатывать после чего я изменил эти дерективы на вот такие

Код

RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev\.net
RewriteCond %{REQUEST_URI} !(vt_fr)/(.*)\.ivp
RewriteRule (.*)\.ivp$ http://www.hotel-chebotarev.net/vt_fr/$1.ivp [R]
RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev\.ru
RewriteCond %{REQUEST_URI} !(vt_ru)/(.*)\.ivp
RewriteRule (.*)\.ivp$ http://www.hotel-chebotarev.net/vt_ru/$1.ivp [R]


все вроде бы заработало кроме одного файлы включающие в себя пробелы не находяться тоесть он пишет что такие файлы не найдены а если к ним обрашаться на прямую выдает 500 ошибку. Счас услышу что множество голосов о том чо пробелы не допустимы но с ними я поделсть ничего не могу. Эти файлы сделаны так что если их переименовать то они отказываются работать.

Может кто нибудь что нибудь подскжет.

З.Ы. Забыл добавить что когда эти файлы лежали в корне сайта и к ним обращались напрямую никаких проблем небыло и все работало. А разделение потребовалось для того что они ещё и от домена зависят и не хотят запускаться на других хостах, переименовать их тоже нельзя а они названы для всех доменных имен одинаково, пришлось их рассовывать по разным папкам, и придумывать такие реврайты так как они и запускаются только в том случае если лежат в корне точнее запускаются они и если происать что они лежат в кактологе но в таком случае взаимосвязи между ними разрываются. Кому интересно что это такое вот http://www.hotel-chebotarev.net/?m=10

Автор: skyboy 1.8.2008, 13:27
Цитата(krundetz @  1.8.2008,  09:50 Найти цитируемый пост)
чо пробелы не допустимы

это в URL-то пробелы? тогда почему именно пробел, а не "%20"?
или в пути к файлу?

Автор: krundetz 1.8.2008, 13:33
у сервера запрашивается именно так в место пробела подставляется 20% но почему он не выдается ни врублюсь все другие файлы выдаются нормально, и раньше выдавался без каких либо проблем файл на сервере есть как в директории так и вкорне

Автор: skyboy 1.8.2008, 13:49
т.е. у тебя файл, на который надо перенаправлять, в имени имеет натуральный пробел?

Автор: krundetz 1.8.2008, 13:52
да и я не могу его убрать так как этот файл можно будет скачать и открыть но с других таких же файлов на него перейти будет нельзя а там самая большая на мой взгляд функциональная приятность именно в этом

вот что пишется в лог
Код

217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:15:02:34 +0400] "GET /maestro%20stud_sleep_yellow.ivp HTTP/1.1" 302 261 "-" 
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:15:02:35 +0400] "GET /vt_fr/maestro%20stud_sleep_yellow.ivp HTTP/1.1" 500 535 "-" 

Автор: skyboy 1.8.2008, 15:07
Цитата(krundetz @  1.8.2008,  12:52 Найти цитируемый пост)
но с других таких же файлов на него перейти

что ты понимаешь под "перейти с других таких же файлов"?
у тебя имена файлов вообще могут стать "1", "2", "3" и т.д..
все равно по запросу "какой-то%20файл" будет вызвано правило mod_rewrite, которое перебросит обращение на скрипт(например, РНР), который по этому "ненастоящему" адресу опрделит настоящее имя(1.ivp) и отдаст этот файл. или у тебя файлы запускаются на стороне сервера? 0_о
кстати говоря, у тебя разве в имени файла не пробел, а "%20"? или все-таки пробел?  smile 

Автор: krundetz 1.8.2008, 16:19
Я уже сам запутался. В общем ситуация в том что эти файлы .ivp они скармливаются флэшке в совокупности эти файлы это виртуальная экскурсия и перехды осушествляются внутри этой флэшки как в браузере куда переход жестко прописано в этих файлах. В общем там технология такая что эти переходы нормально работают только если файлы лежат в корне ну и плюс ко всему привязка к домену идет.
В общем интегрировать на один домен эту икскурсию у меня получилось без всяких проблем все работает все замечательно и спробелами и сподчеркиваниями и с тере в название. Проблемы начались с созданием другой языковой версии на другом домене движек сделан так что все языковые версии лежат в одном месте и выбор языка полностью зависит от доменного имени. В о превых сразуже файлы привязаные к рускому домену откозались работать я сразуже начал выяснять что к чему выяснил про привязку. Поросил их прислать версии для разных доменов они прислали но вся жопа в том что они прислали версии с точно такими же названиями. Я попробовал сменить названия файлы загружаются но внутрение переходы выполнены так что они жестко привязаны к имеющимся названиям. В общем чтобы их поменять необходима уйма времени. Я сделал под разные домены разные папки и сбоисил файлы туда но опять наткнулся на то что внутрение переходы не работают. Вот и пришлось изобретать эти реврайты чтобы они подстовляли вместо жестко прописаного в файлах пути тот который ведет к файлам под каждый домен. Все вроде работает кроме тех файлов в которых есть пробел. Я уже умаелся над этим голову ломать почему и как хуже всего что на сервере стоит Apache 1.3.37 а у меня на рабочей машине 2.22 и реврайты которые я изночально написал превосходно работают на нем а на сервере их пришлось переделывать. Вот собственно вся история моих злоключений. Как точно файлы обрашаются друг к другу я незнаю это для меня черный ящик.

А вообще глянь если интересно ссылка в первом посте есть. Там точно посмотриш что я имею в виду под внутреними переходами. Там сначала загрузиться флэшка а потом в неё файл панарамы и там в нем будут стрелочки на неё кликаешь и переходишь к следующей панараме. Тоесть переходы осуществляются внутри флэша без использования браузера

Автор: skyboy 1.8.2008, 16:33
Цитата(krundetz @  1.8.2008,  15:19 Найти цитируемый пост)
Тоесть переходы осуществляются внутри флэша без использования браузера

посмотрел. не понял, чем это поможет мне и тебе. лучше бы лог по реврайту и лог сервера прикрепил бы(как раз тот лог, где фиксируется упомянутая тобой 500 ошибка)

Автор: Mal Hack 1.8.2008, 16:49
krundetz, давай-те поступим проще. Вы говорите: Хочу с такого-то адреса перенаправить на такой-то адрес. После этого мы вашу проблему совершенно спокойно решим.

У вас по правилас логики не видно...

Автор: krundetz 1.8.2008, 16:58
вот кусок из log файла запросов к серверу где я обрашаюсь к проблемным файлам и к одному непроблемному

Код

217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:52:46 +0400] "GET /?s=130 HTTP/1.1" 200 25729 "http://www.hotel-chebotarev.net/?m=10" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 28231 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:52:49 +0400] "GET /maestro%20stud_sleep_yellow.ivp HTTP/1.1" 302 251 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 28231 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:52:49 +0400] "GET /vt_fr/stud_sleep_yellow.ivp HTTP/1.1" 302 236 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 28231 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:23 +0400] "GET /?s=113 HTTP/1.1" 200 25712 "http://www.hotel-chebotarev.net/?s=130" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:24 +0400] "GET /comf_studio_1%20dop.ivp HTTP/1.1" 302 237 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:24 +0400] "GET /vt_fr/dop.ivp HTTP/1.1" 302 236 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:28 +0400] "GET /?s=115 HTTP/1.1" 200 25710 "http://www.hotel-chebotarev.net/?s=113" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:29 +0400] "GET /comf_stud_2%20dop.ivp HTTP/1.1" 302 237 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:29 +0400] "GET /vt_fr/dop.ivp HTTP/1.1" 302 236 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:32 +0400] "GET /?s=113 HTTP/1.1" 200 25712 "http://www.hotel-chebotarev.net/?s=115" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:33 +0400] "GET /comf_studio_1%20dop.ivp HTTP/1.1" 302 237 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:33 +0400] "GET /vt_fr/dop.ivp HTTP/1.1" 302 236 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:38 +0400] "GET /?s=115 HTTP/1.1" 200 25710 "http://www.hotel-chebotarev.net/?s=113" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:40 +0400] "GET /comf_stud_2%20dop.ivp HTTP/1.1" 302 237 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:40 +0400] "GET /vt_fr/dop.ivp HTTP/1.1" 302 236 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:50 +0400] "GET /?s=111 HTTP/1.1" 200 25712 "http://www.hotel-chebotarev.net/?s=115" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:51 +0400] "GET /comfort_stud_bath.ivp HTTP/1.1" 302 251 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0
217.23.21.182 www.hotel-chebotarev.net - - [01/Aug/2008:17:54:51 +0400] "GET /vt_fr/comfort_stud_bath.ivp HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0" 32016 0


Автор: krundetz 1.8.2008, 17:13
Mal Hack, нужно следующие

на домене есть папки vt_fr и vt_ru
В них лежат файлы с одинаковыми названиями только предназначеные для разных доменов
Файлы могут иметь в название латинские буквы цифры пробелы тире и подчеркивания.

Вот вариант maestro stud_sleep_yellow.ivp, 2kon_lux_sleep.ivp и подобные.

К ним идет обращение как www.hotel-chebotarev.net/2kon_lux_sleep.ivp

Необходимо чтобы для .net файлы брались из папки vt_fr
а для домена .ru из папки vt_ru

Важно также то что если к файлам обращаться необходимо только так www.hotel-chebotarev.net а не hotel-chebotarev.net и соответственно для .ru www.hotel-chebotarev.ru а не hotel-chebotarev.ru

Вот собственно и все что требуется и я думал у меня как раз получилось так сделать но как оказалось такой вариант является рабочим только для локальной машины сервер же брыкается и не хочет так работать. Спасибо.

Автор: Mal Hack 1.8.2008, 19:36
Код

RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev.net
RewriteRule ^(.*?)ivp$ /vt_fr/$1.ivp [L]

RewriteCond %{HTTP_HOST} ^www.hotel-chebotarev.ru
RewriteRule ^(.*?)ivp$ /vt_ru/$1.ivp [L]

При условии, что оба домена настроены на одну папку DOCUMENT_ROOT


Цитата(krundetz @  1.8.2008,  18:13 Найти цитируемый пост)
Важно также то что если к файлам обращаться необходимо только так www.hotel-chebotarev.net а не hotel-chebotarev.net и соответственно для .ru www.hotel-chebotarev.ru а не hotel-chebotarev.ru

Это еще зачем????

Автор: krundetz 2.8.2008, 07:24
Цитата(Mal Hack @ 1.8.2008,  19:36)
Это еще зачем????

Я же говорил что там поставлена защита(зачем незнаю не спрашивайте весь сыр бор из за неё) по имени домена а имя домена прописано как www.hotel-chebotarev.net и подобное же для зоны ru. За регулярки спасибо такой вариант я ещё не пробовал.

Автор: Mal Hack 2.8.2008, 16:38
Цитата(krundetz @  2.8.2008,  08:24 Найти цитируемый пост)
Я же говорил что там поставлена защита(зачем незнаю не спрашивайте весь сыр бор из за неё) по имени домена а имя домена прописано как www.hotel-chebotarev.net и подобное же для зоны ru. 

Вообще, это абсурд. Безопасность на уровне DNS - бред.

Обращение идет к домену 3 уровня, а не второго...
http://nowww.ru/ - почитай. В дополнение к авторам сайта скажу, что www еще в какой-то степени использовалось, чтоб сделать отличие с сетью gopher, которая на момент создания WWW была еще актуальна.

Современные хостинги всегда поддерживают использование WWW, как alias'a к домену второго уровня.

Автор: krundetz 3.8.2008, 17:36
Цитата(Mal Hack @ 2.8.2008,  16:38)
Вообще, это абсурд. Безопасность на уровне DNS - бред.

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

Как там сделана проверка я незнаю но действительно если написать просто hotel-chebotarev.ru работать не будет, насколько я понял там гдето в файле прописан жестко и он сверяет с кагого он был получен и при несовпадение не желает показываться а может там в качестве ключа к расшифровке файла применяется имя домена в общем сами эти файлы как уже говорилось выше делал не я.

Автор: Wolf1994 4.8.2008, 07:33
krundetz, для такого тяжёлого случая советую поставить буферизацию вывода и пропатчить все имена файлов на нормальные перед отдачей клиенту. Не уверен, что это полностью подходит для Вашего случая, просто подаю идею.

Автор: krundetz 4.8.2008, 08:32
Wolf1994, спасибо за идею но в моем случае действительно не подходит так как если поменять названия файлов то разорвутся внутрение связи между файлами ведь я не могу изменить внутрение содержание.

Автор: Wolf1994 4.8.2008, 10:12
krundetz, что за связи, если не секрет? Гиперссылки на HTML страницах?

Автор: krundetz 4.8.2008, 11:00
Wolf1994, не секрет там первоначально загружается зашифрованный видеофайл в флэш проигрыватель и уже в файле есть ссылки на другие файлы которые показываются в виде стрелок и уже щелкнув по одной из них можно перейти на другой файл имитируется как бы виртуальная экскурсия. Как это реализовано внутри незнаю понял только что там все жестко прописано и если наблюдается хоть одно несоответствие проигрыватель пишет что файл невозможно найти или что его невозможно расшифровать.

Mal Hack попробовал предложенный вами вариант реврайта, к моему большому сожалению он не работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)