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
Форумы портала PHP.SU :: Версия для печати :: Нужна помощь в htaccess
Форумы портала PHP.SU » PHP » Регулярные выражения » Нужна помощь в htaccess

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

1. remenikomer - 13 Декабря, 2013 - 21:44:04 - перейти к сообщению
Подскажите, пожалуйста, по проблеме...
нужно на сайте сделать ЧПУ.
Сейчас ссылки такие:
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/

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

Что можно сделать?
2. Deonis - 13 Декабря, 2013 - 21:59:59 - перейти к сообщению
Наверно мой ответ можно было бы разместить под грифом "Оффтоп", но я вам всё же порекомендую обратить внимание на следующий способ: все запросы переадресовываются на "морду" и парсить их уже средствами 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'), которые вы можете самостоятельно анализировать и в зависимости от их значений, выдавать ту или иную информацию.
Таким образом, вы избавляетесь от лишней головной боли, создаваю куча правил.
3. remenikomer - 13 Декабря, 2013 - 22:24:16 - перейти к сообщению
это еще нужно переварить Улыбка
но все же...
даже если я сделаю массив. В нем будет, например, russia. Как скрипт будет выводить россию? Как поймет, что area=country, что россия это не город? Страны, города, регионы в разных таблицах. Именно для этого и используется в GET area=country, типа, выводить информацию по выбранной стране, и чтобы искать в таблице регионов те, у которых страна = Россия.

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

P.S. в PHP не профи... может чего не понял...
4. Deonis - 13 Декабря, 2013 - 22:30:04 - перейти к сообщению
remenikomer пишет:
в PHP не профи
Да, тогда вам будет достаточно проблематично писать свой роутер для такой задачи. А как для новичка, могу посоветовать сервис для генерирования htaccess правил. Хотя, без базовых знаний, вас и там будут ждать "подводные камни", но пробуйте.
5. remenikomer - 13 Декабря, 2013 - 22:41:10 - перейти к сообщению
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/. Ведь в этой строке кроме названия нет параметра, город это или страна...

 

Powered by ExBB FM 1.0 RC1