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 :: И снова о ЧПУ)

 PHP.SU

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


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

> Описание: чпу, mod_rewrite
NEMOGY
Отправлено: 13 Ноября, 2012 - 14:40:01
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




И снова о ЧПУ в надежде получить необходимую информацию! Вопрос о ЧПУ от новичков был и будет, поэтому терпения господа.

И так, что же делает mod_rewrite? Что такого ЧПУшного он делает? Ссылка вида http://site[dot]com/index.php?cat=foo в такую не превращается:
http://site[dot]com/foo/
как я понимаю он не делает напрямую преобразование, как ожидалось. Нужно получить а потом обработать! Это ТАК?

Вопрос: так как же получить и обработать, чтобы ссылки выглядели на сайте именно site.com/foo/ , я так понимаю нужно делать соответственные директории от корня сайта, в моем примере это: './foo/index.php' - ну а index.php уже наверное можно как-то убрать? Тогда при запросе site.com/foo/ мне выдаст страницу из директории foo/. Получается что нужно будет х*ев* тучу директорий и файлов если это будет новость, пост... Так как же быть ?????????????
Здесь то, что сотворил на данный момент ( на текст, надписи и прочее не смотреть!) http://beauty-in-health[dot]net .
Ну не могу понять как же все-таки сделать эти ЧПУ???


Отредактировано модератором: Мелкий, 13 Ноября, 2012 - 14:47:21


-----
boichukvd@gmail.com
 
 Top
Мелкий Супермодератор
Отправлено: 13 Ноября, 2012 - 14:51:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




NEMOGY пишет:
Ссылка вида http://site[dot]com/index.php?cat=foo в такую не превращается:
http://site.com/foo/

Потому что mod_rewrite делает наоборот, данную ссылку example.com/foo/ превращает в то, что удобно разбирать вам, но невидимо юзеру.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

И в index.php разбираем url, пришедший в $_GET['q']

Но сам по себе не препятствует обращаться по обычному example.com/index.php?q=/foo/


-----
PostgreSQL DBA
 
 Top
Zuldek
Отправлено: 13 Ноября, 2012 - 14:57:58
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




Важно понять принцип:
site.com/foo/index.php
вовсе не означает что будет передан файл index.php из директории /foo/ в корневой папке хоста на сервере.

site.com/foo/index.php

при получении такого запроса, веб-сервер сверяется с правилами обработки запросов для данного хоста, если они есть. В зависимости от сервера синтаксис и место расположения этих правил отличаются. Наиболее частые их варианты - mod-rewrite для Apache, nginx (встроено), IIS.

В правилах может быть прописано например, следующее:
на входе ссылка -
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://www.site.com/foo/my-article/

правило:
RewriteRule ^foo/([^/]+)/?$ article.php?articleId=$1 [L]

на выходе -
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://www.site.com/article.php?articleId=my-article

будет вызван скрипт article.php в корне сайта с параметром articleId=my-article

(Отредактировано автором: 13 Ноября, 2012 - 14:59:18)

 
 Top
NEMOGY
Отправлено: 13 Ноября, 2012 - 15:01:58
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Мелкий пишет:
example.com/foo/
При таком обращении браузер ищет директорию /foo/ в корне сайта, как-тогда ему сказать что-ты туда не ходи, а отдай обратно, а я уже направлю куда надо....


-----
boichukvd@gmail.com
 
 Top
Zuldek
Отправлено: 13 Ноября, 2012 - 15:10:23
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




NEMOGY пишет:
При таком обращении браузер ищет директорию /foo/ в корне сайта, как-тогда ему сказать что-ты туда не ходи, а отдай обратно, а я уже направлю куда надо....

При таком обращении браузер не ищет директорию /foo/ в корне сайта.
Браузер отправляет запрос example.com/foo/ серверу example.com
Который смотрит есть ли правила перенаправления для хоста example.com и для запроса example.com/foo/ к нему. В результате применения этих правил он может запустить скрипт хоть example.com/nofoo/nomuu/noforall /test.php (если так прописано в правилах перенаправления. При этом пользователь увидит в адресной строке все тот же - example.com/foo/
В случае если перенаправлений нет, сервер будет пытаться открыть индексный файл в каталоге /foo/ хоста example.com (например example.com/foo/index.php).

(Отредактировано автором: 13 Ноября, 2012 - 15:13:16)

 
 Top
NEMOGY
Отправлено: 13 Ноября, 2012 - 15:12:27
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Вот это уже другое дело, что-то разъясняется)

на входе ссылка - http://www[dot]site[dot]com/foo/my-article/
Она для посетителя так и останется?

на выходе - http://www[dot]site[dot]com/article.php?[dot][dot][dot]cleId=my-article
А это я так понимаю для меня, то есть бери обрабатывай и шли куда надо..?
......... будет вызван скрипт article.php в корне сайта с параметром articleId=my-article Вот, а этот параметр я могу обрабатывать функцией GET или .... какой лучше.

Пока я писал, то вы уже дали ответ)

И почему quote не сработал когда я редактировал? - ладно с этим проехали
(Добавление)
Zuldek
Zuldek пишет:
В случае если перенаправлений нет

Значит если не перенаправляет на foo/index, то правила скорее всего верны?
(Добавление)
Zuldek пишет:
на входе ссылка -

http://beauty-in-health[dot]net/zdorove/
правило:
RewriteRule ^([^/]+)/?$ index.php?cat=$1 [L] ?????

(Отредактировано автором: 13 Ноября, 2012 - 15:16:21)



-----
boichukvd@gmail.com
 
 Top
Zuldek
Отправлено: 13 Ноября, 2012 - 15:27:17
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




NEMOGY пишет:
Значит если не перенаправляет на foo/index, то правила скорее всего верны?

Чтобы знать верно-ли правило перенаправления, нужно:
1. видеть запрос.
2. видеть правило перенаправления
3. знать задачу этого правила и цель перенаправления.

upd.
по вашему правилу запрос будет перенаправлен скрипту Index.php в корне хоста с параметром cat равному символам перед последним слешем запроса.

(Отредактировано автором: 13 Ноября, 2012 - 15:30:52)

 
 Top
NEMOGY
Отправлено: 13 Ноября, 2012 - 15:31:19
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Zuldek пишет:
видеть правило перенаправления

для такой ссылки будет верно привило:
ссылка - http://beauty-in-health[dot]net/zdorove/
правило - RewriteRule ^([^/]*)/?$ index.php?cat=$1 [L]
(Добавление)
Zuldek пишет:
о вашему правилу запрос будет перенаправлен скрипту Index.php в корне хоста с параметром cat равному символам перед последним слешем запроса.

в принципе мне этого и нужно, только подскажите какими функциями можно обрабатывать


-----
boichukvd@gmail.com
 
 Top
Zuldek
Отправлено: 14 Ноября, 2012 - 10:15:46
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




if(isset($_GET['cat'])) echo strip_tags($_GET['cat']);
 
 Top
NEMOGY
Отправлено: 14 Ноября, 2012 - 14:17:09
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Zuldek
Все уже более менее работает, но стили пропали, не могу путь прописать, уже разные варианты перепробовал, при таком .htaccess:
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteBase /
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteRule ^([^/]+)/?$ index.php?cat=$1 [L]
  6. RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?subcat=$1&article=$2 [L]

Стили у меня в корне сайта папка css/style.css , перепробовал кучу вариантов, но подходящего не нашел, если ложу в корень то просто прописываю название файла style.css, то стили работают, но пути к картинкам неправильные... подскажите как правильно все сделать?

(Отредактировано автором: 14 Ноября, 2012 - 14:17:30)



-----
boichukvd@gmail.com
 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2012 - 14:21:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




http://htmlbook[dot]ru/html/base href
И указывайте для всех подгружаемых ресурсов адреса от корня, от /


-----
PostgreSQL DBA
 
 Top
NEMOGY
Отправлено: 14 Ноября, 2012 - 14:28:19
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Мелкий пишет:

только что читал, пробовал так сделать но не выходит

(Отредактировано автором: 14 Ноября, 2012 - 14:36:18)



-----
boichukvd@gmail.com
 
 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