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

Форум Apache

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

 

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

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

тема: Красивые ссылки через .htaccess
 
 автор: xxxZIKxxx   (09.05.2012 в 17:37)   письмо автору
 
 

Доброго времени суток!
У меня была такая ссылка http://имя сайта/?p=main, захотел чтоб вот такой была http://имя сайта/main без проблем всё сделал следующим кодом:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?p=$1
Но теперь возникла необходимость во вторичном гет запросе, то есть:
Как из ссылки http://имя сайта/?p=main&id=5 сделать http://имя сайта/main/5
Наверно надо как то доработать выше указанный код, но вот как?

  Ответить  
 
 автор: bishake   (10.05.2012 в 12:45)   письмо автору
 
   для: xxxZIKxxx   (09.05.2012 в 17:37)
 

В целом, такие задачи лучше всего решать перенаправлением запроса какому-либо одному php-скрипту, ибо завтра у вас появится ещё третий параметр, послезавтра - четвёртый, и т.д....

htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1


index.php:
<?php
$url 
$_GET['url'] ? explode('/'$_GET['url']) : array();
print_r$url );
/*
Array
  (
      [0] => foo
      [1] => bar
      [2] => baz
  )
*/

  Ответить  
 
 автор: Sfinks   (10.05.2012 в 13:38)   письмо автору
 
   для: bishake   (10.05.2012 в 12:45)
 

Не не не.... Разбор скриптом это ж..... (жесть)
PHP медленен. Не стоит такие простые редиректы перекладывать на него.

> Как из ссылки http://имя сайта/?p=main&id=5 сделать http://имя сайта/main/5
Тут вы наверно имеете ввиду наоборот: ссылка (то что пишется в браузере) - это http://имя сайта/main/5, а http://имя сайта/?p=main&id=5 - это реальный обработчик. Верно?

Просто у вас RewriteRule ^(.*)$ ?p=$1 -это общее правило, под которое подходит любая ссылка, которая не является реальным файлом либо дирректорией. Все более частные редиректы нужно расположить ДО общего правила. Тогда общее сработает в том случае если не подойдет ни одно частное. Т.е. примерно так:
RewriteEngine on
RewriteBase /

RewriteRule ^([a-z]+)/(\d+)$ index.php?p=$1&id=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1
P.S. index.php (выделено в коде жирным) я написал не случайно. В mod_rewrite индексные файлы лучше указывать явно. Это уменьшает количество преобразований и предотвращает нежелательные срабатывания других правил.

  Ответить  
 
 автор: bishake   (10.05.2012 в 14:01)   письмо автору
 
   для: Sfinks   (10.05.2012 в 13:38)
 

> PHP медленен. Не стоит такие простые редиректы перекладывать на него.
Ни о каких редиректах и нет речи. В моём случае, запрос передаётся скрипту, в котором он обрабатывается по усмотрению разработчика - инклудятся нужные классы, функции, темлейты и т.д. Не вижу в вашем спопобе никакого преимущества, наоборот - при размещении rewrite-правил в htaccess мы теряем всю гибкость приложения. Как держать в голове все адреса? Что будет, если автор захочет поменять url'ы для страниц? В скольки местах придётся их переписать?

  Ответить  
 
 автор: Sfinks   (10.05.2012 в 15:30)   письмо автору
 
   для: bishake   (10.05.2012 в 14:01)
 

Разница в том, что я ответил на поставленный топикстартером вопрос, а вы предложили решение, включающее в себя существенную переработку кода разбора структуры сайта. Абсолютно разные подходы. Поэтому я не собираюсь ничего доказывать. Автору предложили 2 варианта решения, он пусть сам выбирает что ему нужно.
___
P.S. Добавлю только, что вашим способом я одно время пользовался..... И даже сам его тут пару раз рекомендовал. Но когда на сайте количество разделов увеличивается, число строк пхп-кода отвечающих за разбор входного урл увеличивается в геометрической прогрессии. И понять в нем что-то куда сложнее чем в htaccess. Лично я от этого способа отказался очень быстро. Так что каждому решать за себя.

  Ответить  
 
 автор: bishake   (10.05.2012 в 15:38)   письмо автору
 
   для: Sfinks   (10.05.2012 в 15:30)
 

Что же, не будем вступать в полемику. От себя добавлю, что при умелой организации кода и соблюдении принципов MVC, разбор url'ов скриптом может существенно упростить разработку сайта (топикстартеру возможно может быть полезным изучить устройство таковой системы в Symfony )

  Ответить  
 
 автор: mheap   (05.08.2016 в 16:28)   письмо автору
 
   для: xxxZIKxxx   (09.05.2012 в 17:37)
 

Интернет-сервис OF.ua специализируется на предоставлении услуг по регистрации имен для сайтов в приватных доменах OF.ua, OT.ua, PRI.ua, ViD.ua, WS.ua.
https://of.ua/ru/

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

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