|
|
|
| Здравствуйте.
Знаю, что эта тема уже поднималась много раз, но когда я искал про это в Интернете, она везде либо упоминалась как свершившийся факт, либо до нее не доходили.
Так вот. Есть сайт на Virtuemart. Он сам приводит ссылки к виду http://сайт/index.php/каталог/ и http://сайт/index.php/каталог/товар/ Мне надо, чтобы посетитель видел http://каталог.сайт/товар/ Я мало-мало шарю в регулярных выражениях, пытался написать. Получился просто редирект - при переходе по ссылке http://каталог.сайт/ открывался http://сайт/index.php/каталог/ Пытался писать alias - либо ничего, либо падает с пятисотыми ошибками, да так, что приходилось htaccess удалять.
Буду признателен за помощь. | |
|
|
|
|
|
|
|
для: Follower
(03.06.2012 в 13:23)
| | Гляньте вот эту тему | |
|
|
|
|
|
|
|
для: Sfinks
(03.06.2012 в 19:10)
| | Насколько я понимаю, чтобы так было, надо настраивать чего-то там у хостера?
Я нашел на хостинге кнопку "Редактор DNS зоны", там есть штука такая:
"CNAME (псевдоним)
Параметр записи - <имя узла>
Создавайте псевдонимы вместо записей типа A, которые указывали бы на один IP адрес."
Это не то? | |
|
|
|
|
|
|
|
для: Follower
(03.06.2012 в 21:26)
| | Это то, если у вас ограниченное число поддменов. Т.е. можно вручную для каждого все прописать. Если же вам нужно, чтобы поддомены работали автоматически, например новый пользователь зарегистрировался и сразу у него заработал поддомен username.site.ru, то тут нужно вмешательство того, кто имеет доступ к файлу httpd.conf | |
|
|
|
|
|
|
|
для: Sfinks
(03.06.2012 в 21:52)
| | Я думаю, мне трех должно хватить. Так что, мне там три записи с псевдонимами создать? А что в htaccess на самом сайте писать? | |
|
|
|
|
|
|
|
для: Follower
(03.06.2012 в 22:03)
| | Вы внимательно посмотрите в панели хостинга.... Как правило там есть кнопка: "Создать поддомен". И не нужно заморачиваться со всем остальным. Все будет сделано автоматом. | |
|
|
|
|
|
|
|
для: Sfinks
(04.06.2012 в 11:49)
| | Да, есть там такая кнопка. Но она реально создает поддомен - прямо отдельным сайтом. А мне нужна переадресация на каталоги же. | |
|
|
|
|
|
|
|
для: Follower
(04.06.2012 в 19:04)
| | Вы уверены, что нашли именно ПОДдомен, а не просто "новый домен" или что-то в этом духе?
Как правило, когда создаешь ПОДдомен, то он как раз и создается в виде папки в корневом каталоге его родительского домена.
Если у вас это не так (панели бывают очень разные), то без помощи хостера все-равно не обойтись, т.к. нужно тогда вручную править VirtualHosts в httpd.conf.
Проще всего, обратитесь с этим вопросом непосредственно к вашему хостеру. Они вам либо подскажут где конкретно что нужно нажать и сделать, либо помогут как-то по другому, либо скажут, что у них такой возможности не предусмотрено (такое тоже возможно. У всех свои тараканы в голове). | |
|
|
|
|
|
|
|
для: Follower
(04.06.2012 в 19:04)
| | Стоп. А вы может не разобрались?
Поддомен создается. А располагается он при этом где? Если это поддомен, то вероятнее всего он и становится привязанным к подпапке основного сайта.
Вот у вас путь к сайту какой?
Допустим /userName/domains/site.ru/public_html/ -адрес в браузере: site.ru
Для него поддомен обычно будет в /userName/domains/site.ru/public_html/subdomain/ -адрес в браузере: subdomain.site.ru
Если так, то зачем вам какая еще переадресация? | |
|
|
|
|
|
|
|
для: Sfinks
(05.06.2012 в 22:46)
| | Как я сказал в первом посте, мне не нужны папки в корне сайта - мне нужны каталоги virtuemart, коих вообще не существует - он их видимость сам своим роутером создает. Почитайте первый пост. | |
|
|
|
|
|
|
|
для: Follower
(07.06.2012 в 23:01)
| | > мне нужны каталоги virtuemart, коих вообще не существует - он их видимость сам своим роутером создает.
Я не знаю, что такое virtuemart, но врядли он там чет роутером делает =) Каталоги которых нет - это ЧПУ. Организуются они в .htaccess. Посмотрите в своем .htaccess строки
RewriteEngine On
RewriteRule что-то там еще
| есть? Это и есть то, что создает ЧПУ.
Значит, чтобы вам организовать поддомены, которые ссылаются на каталоги, которых нет, вам нужно (как вы верно нашли в своей панели) создать для нужных поддоменов CNAME записи, чтобы обращение к этим поддоменам приводило к попаданию в корень основного домена. А в .htaccess основного домена уже прописать правила, которые будут отслеживать с какого поддомена обращение и (незаметно для пользователя) редиректить на скрипты, отвечающие за эти поддомены. Получится тот эффект который вам нужен. | |
|
|
|
|
 33.5 Кб |
|
|
для: Sfinks
(07.06.2012 в 23:15)
| | Для общего развития. Virtuemart - компонент каталога/емагазина для джумлы. Так вот там в папке лежит файл router.php, который и создает видимость папок, как я понимаю.
Вот мы, наконец, и дошли до сути вопроса.
ЧТО мне надо написать в htaccess в корне сайта? Не хотите объяснять мне сами - дайте ссылку на толковый мануал, где все это есть. Но конечно, лучше будет, если вы прямо здесь мне приведете пример. | |
|
|
|
|
|
|
|
для: Follower
(10.06.2012 в 10:20)
| | > Не хотите объяснять мне сами - дайте ссылку на толковый мануал
Вообще, после таких предъяв, конечно, желание пропадает....
> лежит файл router.php, который и создает видимость папок
Еще раз говорю, видимость папок создает модуль апача mod_rewrite. В результате его работы в файл router.php попадает путь, который был введен пользователем в адресной строке браузера, в виде элемента массива $_GET.
> ЧТО мне надо написать в htaccess в корне сайта?
Покажите что у вас сейчас есть в хтакцесе? Интересуют строки, начинающиеся с RewriteRule и RewriteCond.
> дайте ссылку на толковый мануал, где все это есть
А вас что, забанили на гугле?
> компонент каталога/емагазина для джумлы
Значит быстрее всего вам помогли бы на форуме Джумлы!
Но раз уж хотите здесь (если еще хотите, конечно), то будем разбираться. Ибо Я НЕ ПОЛЬЗОВАЛСЯ ни джумлой ни, тем более, маркетом этим. | |
|
|
|
|
|
|
|
для: Sfinks
(10.06.2012 в 14:20)
| | У меня вообще нет сейчас .htaccess, я его удалил, так как он выдавал ошибки после моих экспериментов. Тем не менее, в адресной строке у меня не сайт/index.php?=ekjrhge349g9e8y а сайт/index.php/категория/товар. Я не знаю,может это и не виртуемарт делает, но кто тогда?
Вот из какой-то статьи из результатов гугла:
"Еще очевидным преимуществом является то, что, благодаря router.php абсолютно все ссылки в практически любом компоненте/модуле, отображающем товары для Virtuemart, даже сторонних разработчиков, превращаются в SEO ЧПУ ссылки (там, где используется ст. функция JRoute::_())"
А на гугле меня не забанили, но мануалов конкретно вот про домены третьего уровня применительно к htaccess я не нашел.
Я могу попинать этот роутер, ссылки будут вообще без index.php, будут выглядеть прям как папки. Но уж с поддоменами помогите мне, пожалуйста. | |
|
|
|
|
|
|
|
для: 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
Дальше вам разбираться с этим "роутером". | |
|
|
|
|
|
|
|
для: Sfinks
(10.06.2012 в 21:34)
| | Выглядит прямо как то, что мне надо. Создал пробную запись в днс, завтра попробую. | |
|
|
|
|
|
|
|
для: 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." | |
|
|
|
|
|
|
|
для: 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]
|
| |
|
|
|
|
|
|
|
для: Sfinks
(19.06.2012 в 08:34)
| | Сделал, как у хостера написано, учел кодировки. Перенаправляет как надо, но прямо в настоящую подпапку - роутер не успевает перехватывать. Что, придется кидать запросы прямо на него или класть в папки свой php-скрипт? У htaccess получается самый высокий приоритет. Ну да, ведь на роутер приходят уродливые внутренние ссылки, это мне снаружи кажется, что там типа папки.
UPD: А вот флаги в конце rewriterule, там нельзя как-нибудь поставить, чтобы он не физическую папку открывал, а просто переходил по адресу? | |
|
|
|
|
|
|
|
для: 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]
|
Вообще даже сайт/каталог перестал открываться.
Нельзя где-нибудь в логах там посмотреть всю цепочку переадресаций?
И вообще, можно тупо насильно заменить каталог.сайт/товар на сайт/каталог/товар и перейти по этой ссылке? | |
|
|
|