Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужна помощь в htaccess

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
remenikomer
Отправлено: 13 Декабря, 2013 - 21:44:04
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Подскажите, пожалуйста, по проблеме...
нужно на сайте сделать ЧПУ.
Сейчас ссылки такие:
PHP:
скопировать код в буфер обмена
  1. /index.php?do=firms&area=country&areaid=123
  2. /index.php?do=firms&area=region&areaid=543
  3. /index.php?do=firms&area=city&areaid=878


Нужно сделать так:
/firms/russia/
/firms/moskovskaya-oblast/
/firms/moskva/

Я так понимаю, что так не сделать с такими ссылками, потому что areaid зависит от area.
И сервер не поймет как обрабатывать запрос /firms/russia/ - то ли это страна, то ли город...
Правильно думаю?

Можно конечно сделать так ЧПУ:
/firms/country/russia/
/firms/region/moskovskaya-oblast /
/firms/city/moskva/

Но это не бред...

Что можно сделать?
 
 Top
Deonis
Отправлено: 13 Декабря, 2013 - 21:59:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Наверно мой ответ можно было бы разместить под грифом "Оффтоп", но я вам всё же порекомендую обратить внимание на следующий способ: все запросы переадресовываются на "морду" и парсить их уже средствами php. Т.е. в .htaccess только такие правила:
CODE (htaccess):
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} !-f
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteRule ^(.*)$ index.php [L]

В php получаем данные:
PHP:
скопировать код в буфер обмена
  1. $request = $_SERVER['REQUEST_URI'];
  2. // $request - будет содержать, к примеру "/firms/russia/"
  3. // Разбиваем на массив частей, предварительно очистив от лишних слэшей
  4. $request = trim($request,'/\\');
  5. $uri_parts = array_diff(explode('/', $request ),array(''));
  6.  
Теперь $uri_parts будет содержать части: array('firms','russia'), которые вы можете самостоятельно анализировать и в зависимости от их значений, выдавать ту или иную информацию.
Таким образом, вы избавляетесь от лишней головной боли, создаваю куча правил.

(Отредактировано автором: 13 Декабря, 2013 - 22:01:12)

 
 Top
remenikomer
Отправлено: 13 Декабря, 2013 - 22:24:16
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




это еще нужно переварить Улыбка
но все же...
даже если я сделаю массив. В нем будет, например, russia. Как скрипт будет выводить россию? Как поймет, что area=country, что россия это не город? Страны, города, регионы в разных таблицах. Именно для этого и используется в GET area=country, типа, выводить информацию по выбранной стране, и чтобы искать в таблице регионов те, у которых страна = Россия.

дело еще в том, что:
1. CMS - DLE. Делаю для своего модуля. А ядро править не хотел бы..
2. далее, планирую делать субдомены (виртуальные), под города.

P.S. в PHP не профи... может чего не понял...

(Отредактировано автором: 13 Декабря, 2013 - 22:25:52)

 
 Top
Deonis
Отправлено: 13 Декабря, 2013 - 22:30:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




remenikomer пишет:
в PHP не профи
Да, тогда вам будет достаточно проблематично писать свой роутер для такой задачи. А как для новичка, могу посоветовать сервис для генерирования htaccess правил. Хотя, без базовых знаний, вас и там будут ждать "подводные камни", но пробуйте.

(Отредактировано автором: 13 Декабря, 2013 - 22:30:29)

 
 Top
remenikomer
Отправлено: 13 Декабря, 2013 - 22:41:10
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Deonis пишет:
remenikomer пишет:
в PHP не профи
Да, тогда вам будет достаточно проблематично писать свой роутер для такой задачи. А как для новичка, могу посоветовать сервис для генерирования htaccess правил. Хотя, без базовых знаний, вас и там будут ждать "подводные камни", но пробуйте.

Примерно понимаю htaccess, раньше пробовал изучать...
Генератор тоже выдает http://www.domain.com/firms/country/123.html
Если отключить значение area=country, то выходит так:
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?do=$1&area=country&areaid=$2 [L]

А как должны быть сформированы ссылки с get параметрами, чтобы получить в итоге нужные ЧПУ? Может от сюда начать?

Просто не доходит, как должен сервер понять, куда ему перенаправить, по какому адресу из этих:
/index.php?do=firms&area=country&areaid=123
/index.php?do=firms&area=region&areaid=543
/index.php?do=firms&area=city&areaid=878

при запросе /firms/moskva/. Ведь в этой строке кроме названия нет параметра, город это или страна...

(Отредактировано автором: 13 Декабря, 2013 - 22:45:35)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB