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

Форум Apache

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

 

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

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

тема: .htaccess. прошу помощи.
 
 автор: babilonian   (08.02.2007 в 23:15)   письмо автору
 
 

Извиняюсь, что дублирую тему, но в рег. выражениях который день молчание, а проблему самостоятельно решить не получается.
Возникла следующая проблема: запросы на поддомены у меня направляются на index в руте сайта. Содержимое файла .htaccess сейчас такое:



RewriteEngine on 
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^(.+)\.mysite\.ru$ [NC]
RewriteCond %{HTTP_HOST} !^www\.mysite\.ru$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1/
RewriteRule ^(.*)\.mysite\.ru(.*)$ index.php?action=$1



Возникла острая потребность в передаче еще двух гет параметров в виде http://action.mysite.ru/parametr.html или http://action.mysite.ru/parametr1/ и вот тут понимание «подвисло». Подскажите, please, как можно их передать скрипту?

   
 
 автор: glsv (Дизайнер)   (10.02.2007 в 07:26)   письмо автору
 
   для: babilonian   (08.02.2007 в 23:15)
 

Честно говоря, задача не совсем понятна.
Исходные URL Вы написали:
http://action.mysite.ru/parametr.html или http://action.mysite.ru/parametr1/
а в какие URL они должны преобразовыватся не ясно.
Предлагаю такой вариант:

RewriteEngine on  
Options +FollowSymlinks  
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+)\.mysite\.ru$ [NC] 
RewriteCond %{HTTP_HOST} !^www\.mysite\.ru$ [NC]
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php?id=%{HTTP_HOST}&param=$1 [L]

Имя поддомена передается в параметре id, а оставшийся URL в параметре param.
Вот пример для URL-а http://test.mysite.ru/dir1/page.html

[id] => test.mysite.ru
[param] => dir1/page.html

   
 
 автор: babilonian   (13.02.2007 в 06:49)   письмо автору
 
   для: glsv (Дизайнер)   (10.02.2007 в 07:26)
 

Объяснение понятно. Но, хотелось задать пару дополнительных вопросов:
1. Что в данном случае, означает строка
RewriteCond %{REQUEST_URI} !index.php
?
2. Если напрямую задавать вид параметров в строке

RewriteRule ^(.*)$ /index.php?id=%{HTTP_HOST}&param=$1 [L]

, допустим,

RewriteRule ^(.*).htm$ /index.php?id=%{HTTP_HOST}&param=$1 [L]

, то перестает обрабатываться %{HTTP_HOST}. То бишь, если в адресной строке идет http://peremennaya.mysite.ru, то id=peremennaya уже не проходит:(

То, есть адрес peremennaya.mysite.ru/peremennaya1.htm, хотелось бы обработать как index.php?id=peremennaya&peremennaya1=peremennaya1.

   
 
 автор: glsv   (13.02.2007 в 08:53)
 
   для: babilonian   (13.02.2007 в 06:49)
 

Да, URL http://peremennaya.mysite.ru для измененного правила (ниже) не подходит.
[code]
RewriteRule ^(.*).htm$ /index.php?id=%{HTTP_HOST}&param=$1 [L]
[code]
Я как раз и акцентировал Ваше внимание на том, что задача не полностью поставлена. Можно несколько правил использовать.

Составьте для начала полный список все возможных URL и к чему Вы хотите их преобразовать (каждый). Далее алгоритмизируйте правила преобразования. Может получится одно унивесальное правило, может быть несколько разны.
И на основе этих данных уже можно будет писать правила для mod_rewrite.

   
 
 автор: babilonian   (14.02.2007 в 00:20)   письмо автору
 
   для: glsv   (13.02.2007 в 08:53)
 

Если точно, то это должно выглядеть так:
1. запрос на адрес http://peremennaya.mysite.ru/ обрабатывается как http://mysite.ru/page.php?id= peremennaya
2. запрос на адрес http://peremennaya.mysite.ru/index.htm обрабатывается как http://mysite.ru/page.php?id= peremennaya&subid= index
3. запрос на адрес http://peremennaya.mysite.ru/peremennaya2/index.htm обрабатывается как http://mysite.ru/page.php?id= peremennaya&mode= peremennaya2&subid=index
4. ну и то, что я сам смог сотворить:

RewriteRule ^([0-9a-zA-Z]*)-([0-9a-zA-Z@.]*)-([0-9a-zA-Z]*).htm$ index.php?action=$1&data1=$2&data2=$3
RewriteRule ^([0-9a-zA-Z]*).htm$ index.php?action=$1

Это перенаправление с адресов вида: http://mysite.ru/peremennaya.htm и http://mysite.ru/peremennaya-peremannaya1-peremannaya2.htm на страницу index.php в руте. Тот есть, в руте у меня полуцчаются две исполняемых страницы, одна из которых работает с «прямыми» адресами, а другая с поддоменными.

   
 
 автор: babilonian   (15.02.2007 в 23:21)   письмо автору
 
   для: babilonian   (14.02.2007 в 00:20)
 

... и тишина...

   
 
 автор: glsv (Дизайнер)   (18.02.2007 в 07:35)   письмо автору
 
   для: babilonian   (14.02.2007 в 00:20)
 

Можно попробовать как-то так.

RewriteCond %{HTTP_HOST} ^(.+)\.book$ [NC] 
RewriteCond %{HTTP_HOST} !^www\.book$ [NC]
RewriteCond %{REQUEST_URI} !page.php
RewriteRule ^(.*)\.html$ /page.php?id=%{HTTP_HOST}&subid=$1 [L]
RewriteCond %{REQUEST_URI} !page.php
RewriteRule ^(.*)$ /page.php?id=%{HTTP_HOST} [L]

Для адреса http://test.mysite.ru/index.html в скрипт будет переданы следующие переменные.

    [id] => test.mysite.ru
    [subid] => index

Т.е. переменную id нужно будет обработать уже в скрипте.

   
Rambler's Top100
вверх

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