Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Большие проблемы с mod rewrite


Автор: Reet 27.7.2009, 13:25
подскажите пожалуйста как правильно прописать в .htaccess чтоб сервер поменял мне этот адрес  http://localhost/filmz/rec_full.php?id=10

на http://localhost/filmz/rec_full/10 а то что ни как не могу сообразить!!!

Автор: Reet 27.7.2009, 19:17
Админы помогите уже незнаю что делать у меня локальный апатч Денвер 3 версия функция mod_rewrite включен в файл .htaccess логику пишу но сайт на этот файл нереагирует
пишу так:
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^/id/([a-zA-Z]+)$ /rec_full.php?id=$1

Автор: Nigel 29.7.2009, 10:15
Код

RewriteEngine on
RewriteBase /
RewriteRule ^filmz/rec_full/(\d+) filmz/rec_full.php?id=$1

Автор: Reet 29.7.2009, 11:41
Nigel

сделал как ты на писал но не чего не происходит в rewrite.log пишет следующие а что это я не могу понять:
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1d5450/initial] (3) [perdir Z:/home/localhost/www/filmz/] strip per-dir prefix: Z:/home/localhost/www/filmz/rec_full.php -> rec_full.php
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1d5450/initial] (3) [perdir Z:/home/localhost/www/filmz/] applying pattern '^filmz/rec_full/(\d+)' to uri 'rec_full.php'
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1d5450/initial] (1) [perdir Z:/home/localhost/www/filmz/] pass through Z:/home/localhost/www/filmz/rec_full.php
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1db460/initial] (3) [perdir Z:/home/localhost/www/filmz/] strip per-dir prefix: Z:/home/localhost/www/filmz/css/style.css -> css/style.css
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1db460/initial] (3) [perdir Z:/home/localhost/www/filmz/] applying pattern '^filmz/rec_full/(\d+)' to uri 'css/style.css'
127.0.0.1 - - [29/Jul/2009:15:04:25 +0600] [localhost/sid#913520][rid#c1db460/initial] (1) [perdir Z:/home/localhost/www/filmz/] pass through Z:/home/localhost/www/filmz/css/style.css И Т.Д.

Автор: Nigel 29.7.2009, 15:43
А чего ты собственно ожидаешь?
Создай в корне файл filmz/rec_full.php
Напиши в нем
Код

print_r($_GET);

И открой http://localhost/filmz/rec_full/10

Автор: Reet 29.7.2009, 16:41
у меня  папка filmz -  корневая в ней есть файл rec.php через него я попадаю на страницу http://localhost/filmz/rec_full.php?id=10 т.е файл rec_full.php у меня и так уже есть в корневой папке, я в нем в сам вверху дописал то что ты просил <?print_r($_GET);/> теперь при переходе с rec.php на rec_full.php?id=10 в самом вверху страницы над шапкой пишиться   Array ( [id] => 10 )  но адрес так и не меняется в http://localhost/filmz/rec_full/10 

Автор: Nigel 30.7.2009, 10:14
Цитата

у меня  папка filmz -  корневая

Код

print $_SERVER['DOCUMENT_ROOT']

выведет разве Z:/home/localhost/www/filmz/ ?
Цитата

теперь при переходе с rec.php на rec_full.php?id=10 в самом вверху страницы над шапкой пишиться   Array ( [id] => 10 )  но адрес так и не меняется в http://localhost/filmz/rec_full/10  

С rec.php поставь ссылку не на rec_full.php, а на http://localhost/filmz/rec_full/10.
Ведь при вводе http://localhost/filmz/rec_full/10 у тебя обрабаывается твой файл rec_full.php.
ЕЩЕ РАЗ БОЛЬШИМИ БУКВАМИ, ВВОДИТЬ НАДО http://localhost/filmz/rec_full/10.

Автор: Reet 30.7.2009, 12:26
Nigel
извини что достаю но мне не понятно вот смотри у меня есть файл rec.php вот в его коде есть ссылка такая:

код файла rec.php
-/-/-/-/-/-/-/-/-/-/-/-//

printf ("бла бла бла.....
<a href='rec_full.php?id=%s'>%s</a>",$myrow["id"],$myrow["title"]);
} 
while ($myrow = mysql_fetch_array($result)); т.е. тут мне циклом из базы выводится список заметок у каждой свой id

-/-/-/-/-/-/-/-/-/-/-/-/-/-
при нажатии на ссылку <a href='rec_full.php?id=%s'>%s</a> я попадаю на файл допустим rec_full.php?id=10 или rec_full.php?id=11 смотря какой из id берется из базы ПРАВЕЛЬНО?

так вот как правильно написать ссылку в файле rec.php вот эту ссылку <a href='rec_full.php?id=%s'>%s</a> что бы на следующей странице она преобразовывалась в rec_full.php/10
и что указать в .htaccess 



Автор: Nigel 1.8.2009, 12:24
код файла rec.php
-/-/-/-/-/-/-/-/-/-/-/-//

printf ("бла бла бла.....
<a href='/filmz/rec_full/%d'>%s</a>",$myrow["id"],$myrow["title"]);
} 

Автор: Reet 1.8.2009, 18:22
Nigel

не пойму тебе что полный код файла нужен что ли? или как?

Автор: Nigel 3.8.2009, 20:37
Нет, код файла мне не нужен. Я написал как будет выглядеть ссылка в твоем скрипте.
Может, я чего недопонимаю, тогда еще раз более подробно объясни, что в итоге хочешь получить. По какой ссылке должен ходить пользователь, какой файл ты хочешь сделать обработчиком этой ссылки, укажи в каком каталоге находится этот файл и чему равен DOCUMENT_ROOT.

Автор: Reet 3.8.2009, 22:38
так давай попорядку:
1.  DOCUMENT_ROOT показывает Z:/home/localhost/www
2. у меня сайт лежит в папке z:\WebServers\home\localhost\www\filmz\ т.е. папка filmz корневая в ней лежат файлы rec.php и rec_full.php
т.е. первоначально пользователь находится на странице rec.php в ней есть ссылка <a href='rec_full.php?id=%s'>%s</a>",$myrow["id"],$myrow["title"]); при нажатии на которую юзер перелетает на страницу rec_full.php?id=10 (ну здесь id может быть любой смотря какой берется из базы). т.е. в адресной строке пишется адрес http://localhost/filmz/rec_full.php?id=10 а мне надо что бы писалось http://localhost/filmz/rec_full/10.

я делал как ты говорил ставил ссылку такую <a href='/filmz/rec_full/%d'>%s</a>",$myrow["id"],$myrow["title"]); при нажатии на нее я перелетаю на страницу http://localhost/filmz/rec_full/10 (т.е. в адресной строке пишется ТО ЧТО НАДО) но при этом сервер не видет страницу http://localhost/filmz/rec_full/10.
сервер мне выводит следующие:
Not Found
The requested URL /filmz/rec_full/10 was not found on this server.

предполагаю что не правильно указаны правила в файле .htaccess хотя пишу там как ты говорил выше:
RewriteEngine on
RewriteBase /
RewriteRule ^filmz/rec_full/(\d+) filmz/rec_full.php?id=$1


 

Автор: Nigel 4.8.2009, 10:39
Да, ты все сделал правильно.
Вот только смутило
Цитата

1.  DOCUMENT_ROOT показывает Z:/home/localhost/www
2. у меня сайт лежит в папке z:\WebServers\home\localhost\www\filmz\ 

DOCUMENT_ROOT как раз и является корнем твоего сайта, т.е. все пути твоего сайта идут относительно корня. Поэтому твой сайт не может находиться в другой папке, в частности z:/webservers, кроме случая организации папок символичискими ссылками. Вероятно, ты что-то перепутал.
Теперь почему 404 ошибка. Файл .htaccess должен располагаться в корне сайта т.е. здесь Z:/home/localhost/www. Ведь папка filmz у тебя находится тоже здесь, верно?
Если ты размещаешь .htaccess в папке filmz, там же где и твой файл rec_full.php, то правило уже будет другим
Код

RewriteRule ^rec_full/(\d+) filmz/rec_full.php?id=$1

Автор: Reet 4.8.2009, 12:30
спасиб получилось теперь он показывает мне строку как нада: http://localhost/filmz/rec_full/10  но перестал подгружать стили картинки и фоны показывает только текст!
не уже ли для каждого теперь отдельно правило  писать

Автор: Nigel 5.8.2009, 09:28
Для правильного отображения картинок, стилей, видео используйте абсолютные пути либо поместите тэг base в разделе head документа до появления каких-либо ссылок на стили.

Автор: Reet 5.8.2009, 10:55
огромное Спасибо все получилось после добавления тэга base.
можно последний вопрос?
подскажи как при переходе на страницу http://localhost/filmz/rec.php в адресной строке писалось  http://localhost/filmz/rec.html

Автор: Nigel 6.8.2009, 11:03
Да также почти
Код

RewriteRule ^filmz/rec\.html filmz/rec.php

Ну или если в папке filmz находится .htaccess, то
Код

RewriteRule ^rec\.html filmz/rec.php


Автор: Reet 6.8.2009, 16:03
все спасибо все вопросы исчерпаны

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)