Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Администрирование Web серверов и Web служб > Apache Mod_rewrite |
Автор: alligator 19.2.2005, 05:02 |
Нашел статью Mal Hack`a ,очень понравилась статейка....http://wboard.ru/topic29.html Настроил всё у себя на сервере.Но появилась проблемка хотел спросить. у ссылки сделаны типа <A href="?go=news"> News</A> они как бы не изменились но если делать запрос вручную потипу http://localhost/news/ то работает Хочу спросить как правильно обрабатывать ссылки скриптом...или как правильно делать ссылки. |
Автор: Irokez 19.2.2005, 12:38 |
mod_rewrite не ссылки обрабатывает, а запросы, т.е. пишешь www.dom.en/go/ и попадаешь на www.dom.en/?p=go а сами ссылки прописываешь уже сам |
Автор: Guest 19.2.2005, 13:28 | ||
дык ссылки у меня так и прописаны ?go=news токо када в меню переключаешься в строке браузера ничего не меняеться ( |
Автор: alligator 19.2.2005, 13:39 |
Так и остаёться http://127.0.0.1/index.phtml?go=news |
Автор: alligator 19.2.2005, 14:11 | ||
У меня сделана обработка ссылок вот так...
Я хочу переделать под rewrite или это конечно нужно.... |
Автор: Mal Hack 19.2.2005, 14:43 |
написал на свою голову, теперь отдуваться ![]() Фишка в том, что многие не понимают что делает mod_rewrite. alligator вот ты набираешь в браузере YYY/news/ это - GET запрос, он приходит на веб-сервер. Дальше, если включен механизм преобразования адресов (mod_rewrite), он согласно правилам и условиям которые ты в нем прописал, перехватывают этот запрос YYY/news/ и преобразовывают его в другой запрос, который уже и идет к тебе на скрипт. Новый запрос ты не увидишь, как правило. Это делается неявно. При указании [QSA], у тебя параметры от старого запроса (/news/) пойдут в новом, как $_SERVER['REQUEST_URI']. В скрипте тебе уже надо "разбирать" эту переменную и юзать дальше ее разбивку. Выведи в скрипте ее, дальше думаю все поймешь. Что касается ссылок, то ты их сам должен менять на /news/ или /search/ и т.д. mod_rewrite этого не делает. |
Автор: alligator 19.2.2005, 16:09 |
Вот именно это Я и хотел узнать спасибо буду разбираться.... просто я почитал твои статью это как раз то что мне нужно.... спасибо респект тебе |
Автор: alligator 20.2.2005, 04:12 |
У меня такая проблемка я хочу сделать ссылки потипу как папки ... ща сделано просто http://127.0.0.1/news но если вбиваю в строку http://127.0.0.1/news/ перестают грузиться картинки и css стили посмотрел логи в логах они грузяться из http://127.0.0.1/<раздел сайта>/style.css http://127.0.0.1/<раздел сайта>/images/someimage.jpg |
Автор: Mal Hack 20.2.2005, 13:41 |
Надо в скрипт вписывать тэг <base> с УРЛом http://127.0.0.1/ |
Автор: alligator 20.2.2005, 14:01 |
Во работатет спасибо! |
Автор: alligator 21.2.2005, 03:18 |
Еще вопросик ) када прописал <base href="http://127.0.0.1/"> стало всё норм.. но столкнулся с такой проблемой при переходе в http://127.0.0.1/admin/ всё норм инклюдиться файлик admin.php в если я в меню делаю ссылку типа http://127.0.0.1/admin/add/ то опять снова непашет ( а должен поидее инклюдиться файлик add.php в admin.php ...хочеться сделать уж больно понравились мне такие ссылки... ![]() ![]() |
Автор: Mal Hack 21.2.2005, 08:16 |
На подключение файло это не влияет. не должно по крайней мере. Напиши код подключения и где файлы лежат. Код реврайта тоже. |
Автор: alligator 21.2.2005, 14:41 | ||||||
Незнаю как описать проблему дык что сделаю вот так: http://217.10.32.247/ admin 3838 Раздел админ admin.php
Все файле лежат в корне сайта кроме картинок. код реврайта
|
Автор: Mal Hack 21.2.2005, 16:28 | ||
Нельзя так делать... Надо разбивать по / и потом смотреть по параметрам. Не забывайй, что /admin/////////////////////////////////////////add////// Один и тот же физический путь с /admin/add/, но REQUEST_URI будет разный. |
Автор: alligator 21.2.2005, 16:45 |
если через explode делать нормально будет ? |
Автор: Mal Hack 21.2.2005, 16:47 |
А через что еще.. Но перед разбивкой не забедь заменить все // на / через str_replace(); |
Автор: alligator 21.2.2005, 16:49 | ||
потипу
|
Автор: alligator 21.2.2005, 17:00 | ||
я токо непойму зачем столько слешей. P.S. токо не бесись ) я не так давно занимаюсь этим |
Автор: Mal Hack 21.2.2005, 19:29 | ||
Ну теоретически возможность такого рекуест_ури есть, а следовательно надо пресечь дальнейшие проблемы. |
Автор: alligator 21.2.2005, 20:19 | ||
Тоесть замену нужно делать везде как я понял,если пользоваться реврайтом конечно? я сделал так:
|
Автор: Mal Hack 21.2.2005, 20:36 |
Правильно. Еще можно 1. strtolower для $_SERVER['REQUEST_URI']; 2. Подумай нужно ли тебе фишка когда: /new/asdd/insdf?aksd=45 Если не надо, то отрезать надо еще, чтобы не мешалась. Если нужно, то дополнительно разбивать (раньше чем по /) |
Автор: alligator 21.2.2005, 21:45 | ||
Интересная идея я пока с этим окончательно разберусь потом попробую что нить новое. |
Автор: alligator 22.2.2005, 21:14 |
Столкнулся с такой проблемкой если запрос идёт на несуществующий урл то это приводит к зацикливанию и в логах апача пипец твориться ((( |
Автор: Mal Hack 22.2.2005, 22:38 |
Этого не может быть даже теоретически... Мои правила сами по себе обрабатывают 404 и перекидывают на index.php... Дай текст из логов Апача. |
Автор: alligator 22.2.2005, 23:31 | ||||
Вот именно что перекидывают а такой папки даже нету на сервере.... вот лог
|
Автор: Mal Hack 22.2.2005, 23:39 |
http://seolab.ru/add/rfc2068/80.html А при каком обращении такая фишка происходит? С формы или через ссылку? |
Автор: alligator 22.2.2005, 23:47 |
Походу через ссылку потому как раньше папка существовала в нее выкладывалисб фильмы.... а потом удалил а народ ломиться и вот такая батва..... |
Автор: Mal Hack 22.2.2005, 23:54 |
Структуру каталогов дай. И скажи где корень веб-хоста. |
Автор: alligator 23.2.2005, 00:01 |
Да там вообще нету ни одного каталога кроме папки с картинками.... ------------------------------------------------------------------------------------------------ localhost htdocs # ls -lA total 152 -rw-r--r-- 1 root root 166 Feb 21 03:09 .htaccess -rw-r--r-- 1 root root 8205 Feb 22 01:44 add.php -rw-r--r-- 1 5001 root 493 Feb 18 01:33 admin.css -rw-r--r-- 1 5001 root 3107 Feb 22 00:41 admin.php -rw-r--r-- 1 5001 root 1140 Feb 7 21:48 check.php -rw-r--r-- 1 5001 root 144 Feb 6 01:09 config.css -rw-r--r-- 1 5001 root 8306 Feb 20 14:06 config.php -rw-r--r-- 1 5001 root 43 Feb 17 02:57 des.php -rw-r--r-- 1 5001 root 66 Feb 16 18:34 enter.css -rw-r--r-- 1 5001 root 3032 Feb 22 01:55 head.php -rw-r--r-- 1 5001 root 6070 Feb 12 03:17 html.php drwxr-xr-x 4 5001 root 4096 Feb 15 03:21 images -rw-r--r-- 1 5001 root 1076 Jan 29 01:52 index.css -rw-r--r-- 1 5001 root 4142 Feb 22 00:29 index.php -rw-r--r-- 1 5001 root 56 Feb 17 01:50 index.phtml -rw-r--r-- 1 root root 1787 Feb 19 17:28 index.rar -rw-r--r-- 1 5001 root 14 Feb 12 03:15 info.php -rw-r--r-- 1 5001 root 1740 Feb 17 23:51 login.php -rw-r--r-- 1 5001 root 162 Feb 22 21:20 logout.php -rw-r--r-- 1 5001 root 67 Feb 16 18:46 mod.php drwxr-xr-x 3 5001 root 4096 Feb 17 17:22 music -rw-r--r-- 1 5001 root 463 Jan 29 04:03 news.css -rw-r--r-- 1 5001 root 1152 Feb 20 02:03 news.php -rw-r--r-- 1 5001 root 56 Feb 17 03:43 protected.php -rw-r--r-- 1 5001 root 907 Feb 7 21:43 scripts.js -rw-r--r-- 1 5001 root 185 Feb 17 03:43 security.php -rw-r--r-- 1 5001 root 1202 Feb 3 22:25 style.css -rw-r--r-- 1 5001 root 41 Feb 4 02:19 text.css -rw-r--r-- 1 5001 root 2860 Feb 12 03:22 text.php drwxr-xr-x 3 5001 root 4096 Feb 15 03:22 utils -rw-r--r-- 1 5001 root 1955 Feb 7 02:44 viewer.css а корень хоста /usr/local/var/www/htdocs |
Автор: Mal Hack 23.2.2005, 00:10 |
Либо Апач коряво настроен либо что-то мешается.... Что - фиг знает ![]() |
Автор: alligator 23.2.2005, 00:31 | ||
незнаю коряво не коряво, но я вроде нормально настроил его настройки дефолтные.... Добавлено @ 00:32 Могу в принципе конфиг выложить если хочешь.... |
Автор: Mal Hack 23.2.2005, 00:41 |
alligator Я точно не зна чем тут тебе помочь (зацикливание)... Я не вижу причин чтобы оно возникало... |
Автор: alligator 23.2.2005, 01:50 | ||
Ладно подумаю в чём может быть дело.... ты уже много чем мне помог надо хоть что нить самому сделать ) если разберусь сообщу о результатах... Можно в принципе извратиться и создать папку но имхо это не дело... |
Автор: alligator 23.2.2005, 03:50 |
Надо как нить замутить такую штуку как на http://kpnemo.ru потому если урл неверный выдать сообщение ну и тд... вот тока как ( |
Автор: Mal Hack 23.2.2005, 11:52 |
alligator мои правила реврайта гласят: если обращение не к реально существующейц папке и не к реально существующему файлу, перекидывать на index.php, т.е. по сути и есть обработка 404 ошиьки. |
Автор: alligator 23.2.2005, 15:10 |
Тогда получаеться странно ведь что при запросе на http://127.0.0.1/123331/ где 123331 несуществующая папка ... rewrite бросает на http://127.0.0.1/123331/index.php а я как я понял должен бросать в корень http://127.0.0.1/index.php |
Автор: Mal Hack 23.2.2005, 16:40 | ||
Поставь / перед index.phtml |
Автор: alligator 23.2.2005, 17:53 |
Хмм забавно если я захожу через главную старницу ввожу логин и пароль и потом пробую вбиваю несуществующий урл то нормально.... а если сразу в бразере вбиваю http://127.0.0.1/<несуществующая папка>/ тогда опять происходить зацикливание .... блин мне кажеться проблемой как всегда являеться какая нить мелоч (((( http://217.10.32.247/ admin 3838 глянь |
Автор: fara 23.2.2005, 21:55 | ||||
Решаю аналогичную проблему, только у меня дело совсем заторможено. Имею .htaccess в корне сайта:
Пишу в браузере: localhost/temp/nothing папка nothing приэтом не существует. В ответ мне выдается 400 Bad Request Your browser sent a request that this server could not understand. handler.php:
|
Автор: Mal Hack 23.2.2005, 22:11 | ||||
Это уже скрипт циклит.
У меня такая фишка была, когда я правила реврайта в httpd.conf втиснул... В httpd.conf что-ть касательно Rewrit'a есть? |
Автор: alligator 23.2.2005, 22:53 | ||||||
Код скрипта
Добавлено @ 23:02 Mal Hack , мне кажеться я нашел проблему токо я незнаю как мне тогда правильно сделать смотри в index.phtml у меня инклюдиться файлик что приведён выше ,а также инклюдиться файл для защиты от неавторизированного доступа.... когда его отключаешь закцикливание нету но возможен неавторизированный доступ (((
Добавлено @ 23:03 Получаеться что скрипт выполняет редирект на index.php и rewrite делает тоже самое вот и зацикливание ( |
Автор: Mal Hack 23.2.2005, 23:07 |
Ну дык правильно... Где же у тебя $_SESSION['auth'] где-ть инициализируется? Вот условие вечно и выполняется. |
Автор: alligator 23.2.2005, 23:09 | ||
В index.php регистрируеться сессия....
|
Автор: fara 23.2.2005, 23:24 | ||
Mal Hack
Только подгрузка модуля mod_rewrite и всё |
Автор: Mal Hack 23.2.2005, 23:27 |
fara .htaccess еще что-ть содержит? А на каталог выше? alligator Вобщем это уже у тебя в скрипте логическая ошибка... |
Автор: alligator 23.2.2005, 23:30 | ||
Получаеться выход это отключить header..... |
Автор: fara 23.2.2005, 23:31 |
Mal Hack .htaccess ничего больше не содержит, на каталог выше есть две папки, но они к локалке никак не привязаны, т.е. DocumentRoot D:/localhost/www/ |
Автор: Mal Hack 23.2.2005, 23:43 | ||
Искать где у теб постоянно header идет. fara Не знаю из-за чего ошибка могла быть вызвана... У меня этот самый механизм на 4 хостах тестировался... ЗЫ: А RewriteEngine On в httpd.conf точно нету? |
Автор: alligator 23.2.2005, 23:55 | ||||||||
index.php
index.phtml
protected.php
security.php
Постоянного header`a нету ни где |
Автор: fara 23.2.2005, 23:56 |
Mal Hack ты знаешь меня самого это удивляет... в httpd.conf точно нет Rewrite и все что с этим словом связано. я даже пробовал простой пример RewriteRule ^old\.html$ new.html и то же самое ![]() |
Автор: alligator 24.2.2005, 00:05 |
fara, попробуй в httpd.conf найди директиву AllowOverride для папки htdocs или как там у тебя называеться корневая директория.... и если опция стоит None поменя на All |
Автор: fara 24.2.2005, 00:39 |
alligator к сожалению, там стоит All ![]() |
Автор: alligator 24.2.2005, 17:35 |
Mal Hack, слух я что хотел еще спросить если запрос идёт на несуществующую папку как сделать соответствующий вывод сообщения ? Ну например такого раздела не существует |
Автор: Mal Hack 24.2.2005, 21:11 |
alligator Ты понимаешь, что у тебя 404 не будет как таковой ![]() |
Автор: alligator 25.2.2005, 00:06 | ||
Да я понимаю ,но я как раз и спрашиваю как нить подобное замутить можно ? аля эмуляция 404 )) |
Автор: Mal Hack 25.2.2005, 00:27 |
404 теперь для тебя это уже наличие информации зависяей от входящих параметров, а не физическое отсутствие данных на сервере. |
Автор: alligator 25.2.2005, 02:34 |
угу это понятно я уже нашел решение ) |
Автор: Mal Hack 25.2.2005, 12:07 | ||
Нашел, поделись со всеми ![]() |
Автор: alligator 25.2.2005, 21:33 | ||
Ноу проблем )
|
Автор: Mal Hack 25.2.2005, 22:04 |
Совет, вместо elseif'ов сделай switch с default. |
Автор: alligator 25.2.2005, 22:07 | ||
Хорошая идея кстати ) Спасибо! |
Автор: Gorcer 26.2.2005, 04:19 | ||
Зддраствуйте! Мучаюсь второй день, немогу понять смысл этого сообщения:
У меня такаяже проблема, в какой скрипт вписывать????? И вабще как делаеться перенаправление не в файл а в каталог.....??? У меня есть картинки в директории /pict, но когда я перехожу в раздел /about/ он ищет их в /about/pict/......а должен искать в томже /pict... ![]() |
Автор: Mal Hack 26.2.2005, 13:37 | ||
ты делаешь реврайт правила с /about/ на index.php. Вот в этом index.php и надо писать тэг BASE. И в нем писать не IP адрес (можно и его, конечно), а домен, с папкой, в которой этот самый index.php лежит, т.е. путь к той папке, которую ты в своем движке принимаешь за корневую.
Поясни... Просто с каталогами можно вопспользоваться alias'ами... |
Автор: Gorcer 5.3.2005, 02:45 | ||||
чтото опера игнорирует.....
а можно пример,......как ими пользоваться.. |
Автор: Mal Hack 5.3.2005, 13:28 | ||||
Код в студию.
Сорри, тут это не в кассу. |
Автор: Gorcer 5.3.2005, 13:41 | ||||||
а вот и он, под шум аплодисментов появляеться код:
, где 127.0.0.4 мой виртуальный хост,....... даю на растерзание также и код .htaccess:
|
Автор: Mal Hack 5.3.2005, 14:09 | ||
Вот так надо писать, т.к. <base href='127.0.0.4'> IP считается за папку !!! Механизмы реврайта на скорый взгляд вроде правильные. |
Автор: Gorcer 5.3.2005, 16:11 |
вроде работает, спасибо! |