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


Автор: psworld 21.1.2007, 17:54
Хочу сделать разделение по папкам в зависимости от домена. Сделал:

Код

RewriteEngine On
Options +FollowSymlinks

RewriteCond %{ENV:REDIRECT_MYFLAG} ^$
RewriteCond %{HTTP_HOST} ^www\.demo\.ru$
RewriteRule ^(.+) %{HTTP_HOST}$1 [E=MYFLAG:1]
RewriteRule ^www\.demo\.ru(.*) /my%{REQUEST_URI} [L]


Протестировал на локальном домене - работает, закачал к хостеру - выдает запрос "my/my/" (хотя должно быть "my/") и 404 ошибку.

Пробовал еще так:

Код

#Если кто запрашивает _demo/ напрямую - прикрываем
RewriteCond %{ENV:REDIRECT_MYFLAG} ^$
RewriteRule ^_ [F]

RewriteCond %{HTTP_HOST} ^www\.demo\.ru$
RewriteRule ^[^_] _demo%{REQUEST_URI} [E=MYFLAG:1]


Попадаю в корень, а не в _demo/

Короче, кто знает, помогите.

Автор: Mal Hack 21.1.2007, 18:09
По конкретнее задачу опиши, что куда перекидывать надо.

Автор: psworld 21.1.2007, 18:17
Все запросы www.demo.ru должны идти в папку demo/, запросы с домена demo2.ru в папку demo2/ - разделение, чтобы файлы с разных сайтов не хранились вместе.

Можно было бы сделать через http.conf, но к нему нет доступа. smile

Автор: Mal Hack 21.1.2007, 18:29
По-хорошему, это через ServerAlias настраивается.

Автор: psworld 21.1.2007, 18:48
Ну да smile, у меня хостинг колокейтед... Нужно запустить несколько сайтов, под каждый домен хостинг заводить - глупо, а свой сервер - дорого.

Если добавить строчку после всего:

Код

RewriteRule ^/demo/demo(.*) /demo/$1 [L]


работает, но не хочу чтобы было криво.

Еще один вопрос. Как прикрыть доступ к папке /demo при запросе напрямую?


Автор: Mal Hack 21.1.2007, 18:50
Зачем? Есть один хостинг. На него вешается несколько доменов, которые настраиваются через ServerAlias на нужные папки.

Добавлено @ 18:52 
Код
# Заглушка
RewriteRule /demo/? index.php [F]


RewriteCond %{HTTP_HOST} demo\.ru$
RewriteRule ^.+$ /_demo%{REQUEST_URI} [L]

Автор: psworld 21.1.2007, 19:03
Как? Я хостеру напрямую задал вопрос - сказал только через mod_rewrite. Уже 3 месяца ищу ответ :\.

Пример на последней строчке зацикливается. Internal Server Error.

Понял кое-что.
Сначала по запросу сервер заходит в папку demo/, переписывает запрос - добавляет еще раз demo/. Что в денвере, что в интернете.

Автор: Mal Hack 21.1.2007, 19:09
Да, хостер не подарочек... Ладно, будем решать через mod_rewrite.


Код

RewriteRule ^/_demo1/?(.+?)$ /_demo1/$1 [L]
RewriteRule ^/_demo2/?(.+?)$ /_demo2/$1 [L]
RewriteRule ^/_demo3/?(.+?)$ /_demo3/$1 [L]

RewriteCond %{HTTP_HOST} demo1
RewriteRule ^.+$ /_demo1%{REQUEST_URI} [L]
RewriteCond %{HTTP_HOST} demo2
RewriteRule ^.+$ /_demo2%{REQUEST_URI} [L]
RewriteCond %{HTTP_HOST} demo3
RewriteRule ^.+$ /_demo3%{REQUEST_URI} [L]


Автор: psworld 21.1.2007, 19:23
А можно как-либо связать условия RewriteCond по "и"?

Автор: Mal Hack 21.1.2007, 19:27
Код
RewriteRule ^/_(demo1|demo2|demo3)/?(.+?)$ /_$1/$2 [L]

RewriteCond %{HTTP_HOST} (demo1|demo2|demo3)
RewriteRule ^.+$ /_%{HTTP_HOST}%{REQUEST_URI} [L]


Автор: mishaSL 22.1.2007, 18:37
У меня сделано так и все работает:

Код

RewriteCond %{HTTP_HOST} ^www\.site1\.ru [NC]
RewriteRule ^(.*)    http://www.site1.ru/folder_for_site1/$1 [P,L]

RewriteCond %{HTTP_HOST} ^www\.site2\.ru [NC]
RewriteRule ^(.*)    http://www.site2.ru/folder_for_site2/$1 [P,L]

Автор: coyl 23.1.2007, 03:46
Вообще, конечно, это бред. ИМХО. Это базовая функция Апача - виртуальные сервера. Хостера гнать в шею если он предлагает эту тривиальнейшую задачу решать модрерайтом. Это только лишние затраты производительности (причем ИМХО нехилые).

Опять-таки. это работает ТОЛЬКО для киентов поддерживающих протокол HTTP 1.1 так как в 1.0 нет такого заголовка HOST

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