|
|
|
| Привет всем..
Объясните пожалуйста темному человеку как работает mod_rewrite как правильно прописывать все команды... Я почитал на этом форуме но так и не понял что к чему..
создал файл .htaccess в котором такие строки :
RewriteEngine on
Options +FollowSymlinks
RewriteBase dir/
RewriteRule ^(.*)/(.*)\.html$ index.php?page=$1
путь к сайту в ссылке такой : 127.0.0.1/dir/index.php?page=news
В httpd.conf раскоментировал строку
LoadModule rewrite_module modules/mod_rewrite.so
но преобразование URL не происходит подскажите что не так !
Или все наобарот т.е. в скрипте писать ссылку типа 127.0.0.1/dir/news
а .htaccess должен перебрасывать на 127.0.0.1/dir/index.php?page=news ???
Объясните пожалуйста !
Заранее благодарен ! | |
|
|
|
|
|
|
|
для: Fighter
(28.09.2005 в 12:05)
| | >Или все наобарот т.е. в скрипте писать ссылку типа 127.0.0.1/dir/news
а .htaccess должен перебрасывать на 127.0.0.1/dir/index.php?page=news ???
Да, в скрипте, в адресной строке должна быть ссылка 127.0.0.1/dir/news, а уже mod_rewrite должен преобразовывать ее к реально-существующему пути. Хотя в адресной строке адрес не изменится (останется 127.0.0.1/dir/news), т.к. преобразование происходит незаметно для пользователей.
Под вашу задачу подойдут следующие директивы .htaccess
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/?$ index.php?page=$1
|
Это файл должен лежать в директории dir
URL-ы в строке браузера
http://127.0.0.1/dir/news/
http://27.0.0.1/dir/news
Будут преобразовываться к реальному адресу
http://127.0.0.1/dir/index.php?page=news | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(30.09.2005 в 05:38)
| | Спасибо большое за разъяснение, правда у меня все равно не работает, может что то в Httpd.conf не так.. Какие строки должны быть раскоментированы для работы mod_rewrite я только 1 раскоментировал LoadModule... Может еще что нибудь прописать надо ?
И еще вопрос что означает строка вида
RewriteRule ^([^/]*)/?$ index.php?page=$1
с это я вроде разобрался - RewriteRule ^(.*)dir/(.*)$ index.php?page=$2
как я понимаю она делит УРЛ до dir/ в переменную $1 а после dir в переменную $2.
А как читать ту строчку ? | |
|
|
|
|
|
|
|
для: Fighter
(30.09.2005 в 08:59)
| | А htaccess точно лежит в директории dir, а не выше ее?
А настройка Apache через htaccess у вас разрешена? Проверить это просто: напишите абракадабру в .htaccess – если сервер выдал ошибку, то все нормально - .htaccess работает.
Чтобы включить работу с .htaccess в httpd.conf нужно приписать директиву
RewriteRule ^([^/]*)/?$ index.php?page=$1
|
[^/] – любой символ кроме слеша /
Чтобы не проходили URL вида
http://127.0.0.1/dir/news/ааа/eee/index.html
|
* говорит, что этот символ (любой кроме слеша) может повторяться 0 или более раз
/? – говорит о том, что может быть закрывающий слеш, а может его и не быть. Последнее – чтобы правильно обрабатывались варианты:
http://127.0.0.1/dir/news/
http://27.0.0.1/dir/news
|
>с это я вроде разобрался - RewriteRule ^(.*)dir/(.*)$ index.php?page=$2
>как я понимаю она делит УРЛ до dir/ в переменную $1 а после dir в переменную $2.
Да, но только если .htaccess лежит выше директории dir
А если htaccess лежит в самой директории dir, то на вход этому модулю приходит не полный URL, а только его часть, находящаяся после dir/. Поэтому искать dir в уже не следует. | |
|
|
|
|
 34.3 Кб |
|
|
для: glsv (Дизайнер)
(01.10.2005 в 06:06)
| | Спасибо за ответ, только все равно не работает :((
.htaccess лежит точно в дирриктории dir.. Пробовал писать абрукадабру :) сервер выдал ошибку.. значит все работает :)
Пишу такую ссылку http://127.0.0.1/dir/news и ничего не происходит появляется ошибка 404.
Прикрепляю на всякий случай файл httpd.conf
И вот еще лог mod_rewriter после 1 запуска страницы http://127.0.0.1/dir/kurs
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (3) [per-dir C:/www/www1/dir/] strip per-dir prefix: C:/www/www1/dir/kurs -> kurs
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (3) [per-dir C:/www/www1/dir/] applying pattern '^([^/]*)/?$' to uri 'kurs'
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (2) [per-dir C:/www/www1/dir/] rewrite kurs -> index.php?page=kurs
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (3) split uri=index.php?page=kurs -> uri=index.php, args=page=kurs
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (3) [per-dir C:/www/www1/dir/] add per-dir prefix: index.php -> C:/www/www1/dir/index.php
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (2) [per-dir C:/www/www1/dir/] trying to replace prefix C:/www/www1/dir/ with /
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (5) strip matching prefix: C:/www/www1/dir/index.php -> index.php
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (4) add subst prefix: index.php -> /index.php
127.0.0.1 - - [03/Oct/2005:10:07:10 +0400] [127.0.0.1/sid#23bc38][rid#476e88/initial] (1) [per-dir C:/www/www1/dir/] internal redirect with /index.php [INTERNAL REDIRECT] | |
|
|
|
|
|
|
|
для: Fighter
(03.10.2005 в 09:23)
| | Да, у меня точно такие же логи.
Ага, видимо, вот где ошибка. При таких директивах вызывается файл index.php из корневой директории.
Нужно поменять
RewriteBase /
На
RewriteBase /dir
|
Тогда будет открываться index.php, лежащий в директории dir | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(04.10.2005 в 04:50)
| | :) я так уже пробовал все равно не работает.. вот лог
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (3) [per-dir C:/www/www1/dir/] strip per-dir prefix: C:/www/www1/dir/glavnaya -> glavnaya
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (3) [per-dir C:/www/www1/dir/] applying pattern '^([^/]*)/?$' to uri 'glavnaya'
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (2) [per-dir C:/www/www1/dir/] rewrite glavnaya -> index.php?page=glavnaya
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (3) split uri=index.php?page=glavnaya -> uri=index.php, args=page=glavnaya
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (3) [per-dir C:/www/www1/dir/] add per-dir prefix: index.php -> C:/www/www1/dir/index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (2) [per-dir C:/www/www1/dir/] trying to replace prefix C:/www/www1/dir/ with /dir
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (5) strip matching prefix: C:/www/www1/dir/index.php -> index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (4) add subst prefix: index.php -> /dir/index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#482eb8/initial] (1) [per-dir C:/www/www1/dir/] internal redirect with /dir/index.php [INTERNAL REDIRECT]
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (3) [per-dir C:/www/www1/dir/] strip per-dir prefix: C:/www/www1/dir/index.php -> index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (3) [per-dir C:/www/www1/dir/] applying pattern '^([^/]*)/?$' to uri 'index.php'
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (2) [per-dir C:/www/www1/dir/] rewrite index.php -> index.php?page=index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (3) split uri=index.php?page=index.php -> uri=index.php, args=page=index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (3) [per-dir C:/www/www1/dir/] add per-dir prefix: index.php -> C:/www/www1/dir/index.php
127.0.0.1 - - [04/Oct/2005:09:19:27 +0400] [127.0.0.1/sid#23bc38][rid#480a88/initial/redir#1] (1) [per-dir C:/www/www1/dir/] initial URL equal rewritten URL: C:/www/www1/dir/index.php [IGNORING REWRITE]
И это еще не все.. на этой странице index.php есть ссылки на файлы которые можно скачать скажем 1.rar и он не скачивается из зи преобразования ссылок.. можно как нибудь написать что бы УРЛ на файл не преобразовывался ? полный его путь 127.0.0.1/dir/files/1.rar | |
|
|
|
|
|
|
|
для: Fighter
(04.10.2005 в 09:22)
| | >все равно не работает.. вот лог
А вот так?
RewriteEngine on
Options +FollowSymlinks
RewriteBase /dir
RewriteRule ^([^/\.]*)/?$ index.php?page=$1
|
Проверяем, что бы в URL не было точек. Это должно исключить повторное преобразование если в URL указано имя файла, страницы. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(05.10.2005 в 05:59)
| | Млин... Все равно не фига не работает :(((
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (3) [per-dir C:/www/www1/dir/] strip per-dir prefix: C:/www/www1/dir/ob -> ob
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (3) [per-dir C:/www/www1/dir/] applying pattern '^([^/\.]*)/?$' to uri 'ob'
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (2) [per-dir C:/www/www1/dir/] rewrite ob -> index.php?page=ob
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (3) split uri=index.php?page=ob -> uri=index.php, args=page=ob
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (3) [per-dir C:/www/www1/dir/] add per-dir prefix: index.php -> C:/www/www1/dir/index.php
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (2) [per-dir C:/www/www1/dir/] trying to replace prefix C:/www/www1/dir/ with /dir
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (5) strip matching prefix: C:/www/www1/dir/index.php -> index.php
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (4) add subst prefix: index.php -> /dir/index.php
127.0.0.1 - - [05/Oct/2005:08:56:32 +0400] [127.0.0.1/sid#23bd28][rid#47af70/initial] (1) [per-dir C:/www/www1/sgu/] internal redirect with /dir/index.php [INTERNAL REDIRECT]
Зачем он повторно преобразовывает ?? :( | |
|
|
|
|
|
|
|
для: Fighter
(05.10.2005 в 08:57)
| | (прошу прощения, ошибся. Сообщение не в кассу - прошу модератора его удалить.) | |
|
|
|
|
|
|
|
для: кен
(06.10.2005 в 17:12)
| | Неужели никто ничего не подскажет :( | |
|
|
|
|
|
|
|
для: Fighter
(07.10.2005 в 10:58)
| | Попробуйте задать список разрешённых символов. Например, так:
RewriteRule ^([a-z0-9_-]*)/?$ 1.php?page=$1
|
Разрешаются цифры, строчные латинские буквы, подчёркивание и дефис. Если нужно, можно добавить туда и другие символы. | |
|
|
|
|
|
|
|
для: Fighter
(05.10.2005 в 08:57)
| | Хм… еще раз перепроверил. У меня эти директивы отрабатывают правильно.
И у Вас вроде бы должны
internal redirect with /dir/index.php [INTERNAL REDIRECT]
|
Вызывается /dir/index.php
>скажем 1.rar и он не скачивается из зи преобразования ссылок.. можно как нибудь
> написать что бы УРЛ на файл не преобразовывался ? полный его путь
> 127.0.0.1/dir/files/1.rar
Преобразовывайте эти URL отдельным правилом. Можно привязаться к имени папки files. У меня заработало со следующим правилом.
RewriteRule (.*)files/(.*) files/$2
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.10.2005 в 07:03)
| | Дизайнер, огромное спасибо, все работает ! | |
|
|
|
|
|
|
|
для: Fighter
(10.10.2005 в 08:44)
| | Пытаюсь превратить ссылки такого вида
http://localhost/catalog/index.php?cat=4
на такие
http://localhost/catalog/cat_4.html
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^cat_(.*)([0-9]+)\.html$ $1catalog/index.php?cat=$2
всё работает как надо, единственное только если переменная cat= будет превышать одной цифры то страница не найдена
т.е в место цифры "4" будет стоять "35" то почемуто страница становиться не найденой
пытался изменить в _(.*)([0-9]+)
+ на *, тоесть неограниченное количество цифр, так тоже ничего не происходило | |
|
|
|
|
|
|
|
для: Иван
(28.10.2005 в 22:36)
| | Вот так заработало
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^cat_([0-9]*)\.html$ catalog/index.php?cat=$1
|
.htaccess лежит в директории catalog | |
|
|
|
|
|
|
|
для: Fighter
(28.09.2005 в 12:05)
| | Прошу прощения конечно, но прочетав десятки форумов не нашел решения проблеммы
Есть файл news.php в корневой
надо перенаправить
news.php?id=id
на, допустим
news/news_id/
RewriteRule ^(.*)news/news_(.*) /news.htm?id=$2
id не GET'ается... пути до кортинок(картинки в папке img) и style.css тоже меняются, и бяка получается хотя сам скрипт грузится.. помогите плиз | |
|
|
|
|
|
|
|
для: hate
(07.11.2005 в 21:59)
| | Не понятна проблема.
По вашим словам все нормально...
> пути до кортинок(картинки в папке img) и style.css тоже меняются
> сам скрипт грузится
>id не GET'ается
Это значит, что при преобразовании Rewrite теряется значение id?
Проверил Ваши директивы у себя. Параметр id передается.
Правда я подредактировал немного
RewriteRule ^(.*)news/news_([^/]*) /index.php?id=$2
|
Иначе в параметр заносится значение id вместе с закрывающим слешем.
PS: Под новые вопросы лучше создавать новые темы. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.11.2005 в 01:11)
| | Действительно, на сервере работает всё кроме того, что
пути до кортинок(картинки в папке img) и style.css тоже меняются!!
Можете сами посмотреть
http://www.saiting.ru/news/news_7/
RewriteRule ^(.*)news/news_([^/]*) /news2.htm?id=$2
|
| |
|
|
|
|
|
|
|
для: hate
(08.11.2005 в 07:24)
| | Вот так можно обработать изображения из папки images. Со стилями аналогично.
RewriteRule ^(.*)news/news_\d+/images(.*) /images$2
RewriteRule ^(.*)news/news_([^/]*) /index.php?id=$2
|
| |
|
|
|