Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Каталоги как домены третьего уровня
 
 автор: Follower   (03.06.2012 в 13:23)   письмо автору
 
 

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

Так вот. Есть сайт на Virtuemart. Он сам приводит ссылки к виду http://сайт/index.php/каталог/ и http://сайт/index.php/каталог/товар/ Мне надо, чтобы посетитель видел http://каталог.сайт/товар/ Я мало-мало шарю в регулярных выражениях, пытался написать. Получился просто редирект - при переходе по ссылке http://каталог.сайт/ открывался http://сайт/index.php/каталог/ Пытался писать alias - либо ничего, либо падает с пятисотыми ошибками, да так, что приходилось htaccess удалять.
Буду признателен за помощь.

  Ответить  
 
 автор: Sfinks   (03.06.2012 в 19:10)   письмо автору
 
   для: Follower   (03.06.2012 в 13:23)
 

Гляньте вот эту тему

  Ответить  
 
 автор: Follower   (03.06.2012 в 21:26)   письмо автору
 
   для: Sfinks   (03.06.2012 в 19:10)
 

Насколько я понимаю, чтобы так было, надо настраивать чего-то там у хостера?
Я нашел на хостинге кнопку "Редактор DNS зоны", там есть штука такая:
"CNAME (псевдоним)
Параметр записи - <имя узла>
Создавайте псевдонимы вместо записей типа A, которые указывали бы на один IP адрес."
Это не то?

  Ответить  
 
 автор: Sfinks   (03.06.2012 в 21:52)   письмо автору
 
   для: Follower   (03.06.2012 в 21:26)
 

Это то, если у вас ограниченное число поддменов. Т.е. можно вручную для каждого все прописать. Если же вам нужно, чтобы поддомены работали автоматически, например новый пользователь зарегистрировался и сразу у него заработал поддомен username.site.ru, то тут нужно вмешательство того, кто имеет доступ к файлу httpd.conf

  Ответить  
 
 автор: Follower   (03.06.2012 в 22:03)   письмо автору
 
   для: Sfinks   (03.06.2012 в 21:52)
 

Я думаю, мне трех должно хватить. Так что, мне там три записи с псевдонимами создать? А что в htaccess на самом сайте писать?

  Ответить  
 
 автор: Sfinks   (04.06.2012 в 11:49)   письмо автору
 
   для: Follower   (03.06.2012 в 22:03)
 

Вы внимательно посмотрите в панели хостинга.... Как правило там есть кнопка: "Создать поддомен". И не нужно заморачиваться со всем остальным. Все будет сделано автоматом.

  Ответить  
 
 автор: Follower   (04.06.2012 в 19:04)   письмо автору
 
   для: Sfinks   (04.06.2012 в 11:49)
 

Да, есть там такая кнопка. Но она реально создает поддомен - прямо отдельным сайтом. А мне нужна переадресация на каталоги же.

  Ответить  
 
 автор: Sfinks   (05.06.2012 в 22:40)   письмо автору
 
   для: Follower   (04.06.2012 в 19:04)
 

Вы уверены, что нашли именно ПОДдомен, а не просто "новый домен" или что-то в этом духе?
Как правило, когда создаешь ПОДдомен, то он как раз и создается в виде папки в корневом каталоге его родительского домена.

Если у вас это не так (панели бывают очень разные), то без помощи хостера все-равно не обойтись, т.к. нужно тогда вручную править VirtualHosts в httpd.conf.

Проще всего, обратитесь с этим вопросом непосредственно к вашему хостеру. Они вам либо подскажут где конкретно что нужно нажать и сделать, либо помогут как-то по другому, либо скажут, что у них такой возможности не предусмотрено (такое тоже возможно. У всех свои тараканы в голове).

  Ответить  
 
 автор: Sfinks   (05.06.2012 в 22:46)   письмо автору
 
   для: Follower   (04.06.2012 в 19:04)
 

Стоп. А вы может не разобрались?

Поддомен создается. А располагается он при этом где? Если это поддомен, то вероятнее всего он и становится привязанным к подпапке основного сайта.
Вот у вас путь к сайту какой?
Допустим /userName/domains/site.ru/public_html/ -адрес в браузере: site.ru
Для него поддомен обычно будет в /userName/domains/site.ru/public_html/subdomain/ -адрес в браузере: subdomain.site.ru

Если так, то зачем вам какая еще переадресация?

  Ответить  
 
 автор: Follower   (07.06.2012 в 23:01)   письмо автору
 
   для: Sfinks   (05.06.2012 в 22:46)
 

Как я сказал в первом посте, мне не нужны папки в корне сайта - мне нужны каталоги virtuemart, коих вообще не существует - он их видимость сам своим роутером создает. Почитайте первый пост.

  Ответить  
 
 автор: Sfinks   (07.06.2012 в 23:15)   письмо автору
 
   для: Follower   (07.06.2012 в 23:01)
 

> мне нужны каталоги virtuemart, коих вообще не существует - он их видимость сам своим роутером создает.
Я не знаю, что такое virtuemart, но врядли он там чет роутером делает =) Каталоги которых нет - это ЧПУ. Организуются они в .htaccess. Посмотрите в своем .htaccess строки
RewriteEngine On
RewriteRule что-то там еще
есть? Это и есть то, что создает ЧПУ.

Значит, чтобы вам организовать поддомены, которые ссылаются на каталоги, которых нет, вам нужно (как вы верно нашли в своей панели) создать для нужных поддоменов CNAME записи, чтобы обращение к этим поддоменам приводило к попаданию в корень основного домена. А в .htaccess основного домена уже прописать правила, которые будут отслеживать с какого поддомена обращение и (незаметно для пользователя) редиректить на скрипты, отвечающие за эти поддомены. Получится тот эффект который вам нужен.

  Ответить  
 
 автор: Follower   (10.06.2012 в 10:20)   письмо автору
33.5 Кб
 
   для: Sfinks   (07.06.2012 в 23:15)
 

Для общего развития. Virtuemart - компонент каталога/емагазина для джумлы. Так вот там в папке лежит файл router.php, который и создает видимость папок, как я понимаю.
Вот мы, наконец, и дошли до сути вопроса.
ЧТО мне надо написать в htaccess в корне сайта? Не хотите объяснять мне сами - дайте ссылку на толковый мануал, где все это есть. Но конечно, лучше будет, если вы прямо здесь мне приведете пример.

  Ответить  
 
 автор: Sfinks   (10.06.2012 в 14:20)   письмо автору
 
   для: Follower   (10.06.2012 в 10:20)
 

> Не хотите объяснять мне сами - дайте ссылку на толковый мануал
Вообще, после таких предъяв, конечно, желание пропадает....

> лежит файл router.php, который и создает видимость папок
Еще раз говорю, видимость папок создает модуль апача mod_rewrite. В результате его работы в файл router.php попадает путь, который был введен пользователем в адресной строке браузера, в виде элемента массива $_GET.

> ЧТО мне надо написать в htaccess в корне сайта?
Покажите что у вас сейчас есть в хтакцесе? Интересуют строки, начинающиеся с RewriteRule и RewriteCond.

> дайте ссылку на толковый мануал, где все это есть
А вас что, забанили на гугле?

> компонент каталога/емагазина для джумлы
Значит быстрее всего вам помогли бы на форуме Джумлы!
Но раз уж хотите здесь (если еще хотите, конечно), то будем разбираться. Ибо Я НЕ ПОЛЬЗОВАЛСЯ ни джумлой ни, тем более, маркетом этим.

  Ответить  
 
 автор: Follower   (10.06.2012 в 15:12)   письмо автору
 
   для: Sfinks   (10.06.2012 в 14:20)
 

У меня вообще нет сейчас .htaccess, я его удалил, так как он выдавал ошибки после моих экспериментов. Тем не менее, в адресной строке у меня не сайт/index.php?=ekjrhge349g9e8y а сайт/index.php/категория/товар. Я не знаю,может это и не виртуемарт делает, но кто тогда?

Вот из какой-то статьи из результатов гугла:
"Еще очевидным преимуществом является то, что, благодаря router.php абсолютно все ссылки в практически любом компоненте/модуле, отображающем товары для Virtuemart, даже сторонних разработчиков, превращаются в SEO ЧПУ ссылки (там, где используется ст. функция JRoute::_())"

А на гугле меня не забанили, но мануалов конкретно вот про домены третьего уровня применительно к htaccess я не нашел.

Я могу попинать этот роутер, ссылки будут вообще без index.php, будут выглядеть прям как папки. Но уж с поддоменами помогите мне, пожалуйста.

  Ответить  
 
 автор: Sfinks   (10.06.2012 в 21:34)   письмо автору
 
   для: Follower   (10.06.2012 в 15:12)
 

> Я могу попинать этот роутер, ссылки будут вообще без index.php, будут выглядеть прям как папки.

Т.е. вы умеете с ним обращаться? С router.php. Да? Я правильно понимаю? А то мне с его структурой ну совсем не хочется разбираться.

Тогда так. Предположим нам нужно перенаправить subdomain1.site.ru и subdomain2.site.ru на router.php, который должен разрулить дальнейшее поведение сайта.

Саписи CNAME, которые указывают на основной домен нужно создать заранее, т.к. чтобы они заработали, нужно дождаться когда обновятся DNS-сервера. А это обычно занимает от 4 до 24 часов. Тут уж ниче не поделаешь.

В htaccess в корне сайта пропишите такое:
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^subdomain1\.site\.ru$ [NC]
RewriteRule ^(.*)$ router.php?catalog=subdomain1&request_uri=$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^subdomain2\.site\.ru$ [NC]
RewriteRule ^(.*)$ router.php?catalog=subdomain2&request_uri=$1 [L,QSA]

В результате при обращении по адресу, например:

http://subdomain1.site.ru/mashiny/audi/?model=A4

Произойдет скрытая от пользователя переадресация на

http://site.ru/router.php?catalog=subdomain1&request_uri=mashiny%2Faudi%2F&model=A4

Дальше вам разбираться с этим "роутером".

  Ответить  
 
 автор: Follower   (10.06.2012 в 23:51)   письмо автору
 
   для: Sfinks   (10.06.2012 в 21:34)
 

Выглядит прямо как то, что мне надо. Создал пробную запись в днс, завтра попробую.

  Ответить  
 
 автор: Follower   (16.06.2012 в 10:56)   письмо автору
 
   для: Sfinks   (10.06.2012 в 21:34)
 

У меня сейчас ссылки вида сайт/index.php/каталог/товар-detail
Detail надо будет убрать, там будут каталоги второго уровня вложенности.
Он ведь будет скрыто переадресовывать каталог.сайт/подкаталог/товар на сайт/index.php/каталог/подкаталог/товар?

Разобрался вроде с псевдонимами, теперь пишет не "сервер не найден", а "страница не найдена".
Нельзя ли не передавать запрос на роутер, а сразу пользоваться результатом его работы? То есть правило типа
RewriteCond %{HTTP_HOST} ^subdomain1\.site\.ru$ [NC] 
RewriteRule ^(.*)$ index.php/subdomain1 [L,QSA]

И еще, у меня домен кириллический, мне в условие правила писать в utf8 или punycode?

UPD: Вот, сделал ссылки без index.php. Они сейчас выглядят как сайт/каталог/ и сайт/каталог/страница.html И нашел у хостера галочку "Создать поддомен в свою папку", которая переадресует запросы к поддоменам на основной сайт. Там же есть генератор содержимого htaccess для переадресации в папки. Он такое пишет:
RewriteRule ^каталог/ - [L]
RewriteCond %{HTTP_HOST} ^каталог\.сайт\.su$
RewriteCond %{DOCUMENT_ROOT}/каталог%{REQUEST_URI} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]
RewriteCond %{HTTP_HOST} ^каталог\.сайт\.su$
RewriteRule (.*) каталог/$1 [L,QSA]


И он мне выдает "The requested URL / was not found on this server."

  Ответить  
 
 автор: Sfinks   (19.06.2012 в 08:34)   письмо автору
 
   для: Follower   (16.06.2012 в 10:56)
 

> И еще, у меня домен кириллический, мне в условие правила писать в utf8 или punycode?
Это сложнее....

Имена доменов в
RewriteCond %{HTTP_HOST} ^каталог\.сайт\.su$
нужно писать в punycode, т.к. на сервер приходит именно такое закодированное название.

А вот имена каталогов и путей в
RewriteRule (.*) каталог/$1 [L,QSA]
нужно писать в 16тиричных кодах по таблице ASCII.

Я обычно перевожу так (допустим слово каталог):
вбиваю в адресной строке браузера https://www.google.ru/?q=каталог
адрес переводится в такой: https://www.google.ru/?q=%EA%E0%F2%E0%EB%EE%E3
беру из этого %EA%E0%F2%E0%EB%EE%E3 и заменяю % на \x
получаем:
RewriteRule (.*) \xEA\xE0\xF2\xE0\xEB\xEE\xE3/$1 [L,QSA]

  Ответить  
 
 автор: Follower   (21.06.2012 в 20:01)   письмо автору
 
   для: Sfinks   (19.06.2012 в 08:34)
 

Сделал, как у хостера написано, учел кодировки. Перенаправляет как надо, но прямо в настоящую подпапку - роутер не успевает перехватывать. Что, придется кидать запросы прямо на него или класть в папки свой php-скрипт? У htaccess получается самый высокий приоритет. Ну да, ведь на роутер приходят уродливые внутренние ссылки, это мне снаружи кажется, что там типа папки.

UPD: А вот флаги в конце rewriterule, там нельзя как-нибудь поставить, чтобы он не физическую папку открывал, а просто переходил по адресу?

  Ответить  
 
 автор: Follower   (23.06.2012 в 12:22)   письмо автору
 
   для: Sfinks   (19.06.2012 в 08:34)
 

Пробовал PT поставить, что-то не работает.
RewriteRule ^каталог/ - [L]
RewriteCond %{HTTP_HOST} ^каталог\.сайт\.su$
RewriteCond %{DOCUMENT_ROOT}/каталог%{REQUEST_URI} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [PT,L]
RewriteCond %{HTTP_HOST} ^каталог\.сайт\.su$
RewriteRule (.*) каталог/$1 [PT,L,QSA]

Вообще даже сайт/каталог перестал открываться.

Нельзя где-нибудь в логах там посмотреть всю цепочку переадресаций?

И вообще, можно тупо насильно заменить каталог.сайт/товар на сайт/каталог/товар и перейти по этой ссылке?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования