Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Apache+mod_rewrite

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Открыть новую тему     Написать ответ в эту тему

Vanya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Значит так-с. (АПАЧ)
Есть такая конструкция http://domain.ru/?id=1
Надо чтобы была такая http://domain.ru/chapter1 ну или http://domain.ru/1
И ко всему прочему, чтобы это еще и работало. Есть такой механизЬм mod_rewrite и что то типа RwriteEngine on прописывается в .htaccess Но как это настраивается чтобы было как мне надо, я не знаю. Кто сможет чем помочь?
 
 


FAQ по Apache
Apache + mod_rewrite: замена ссылок
Руководство по URL преобразованиям
Модуль Apache mod_rewrite - подробнейшее описание на русском

Всего записей: 8 | Зарегистр. 19-09-2002 | Отправлено: 08:53 30-10-2002 | Исправлено: lynx, 01:01 15-02-2004
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
благодарю за оперативность, но получаем

Код:
 
    [lang] => en
    [vendor] => vendor
    [drvname] => driver/download/file
    [action] =>  
    [filename] =>  
 

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 12:53 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd

Код:
RewriteRule ^([^/]*)/(([^/]*)/(([^/]*)/([^/]*/([^/]*)?)?)?)? index.php?lang=$1&vendor=$3&drvname=$5&action=$6&filename=$7 [NS,NC,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:16 11-09-2007
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
с этим правилом результат такой:

Цитата:
    [lang] => en
    [vendor] => vendor
    [drvname] => driver
    [action] => download/file
    [filename] => file

При чем только если слэш вписан вручную.
 
В связке с правилом

Код:
 
#Add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301]
 

ни одно из двух просто не работает, выдавая Moved permanently и не добавляя слэш. Голова уже пухнет от экспериментов.
 
 
Добавлено:
P.S. Причем все глюки начинаются после $3. До него включительно работает и прошлый, данный вами, вариант.

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 16:33 11-09-2007 | Исправлено: mtxd, 16:35 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd
Настраивайте лог, и результаты выкладывайте здесь.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:58 11-09-2007
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
LogLevel 3 для

Код:
RewriteRule ^([a-z]*)/(([a-z]*)/((.*)/(([a-z]*)/(.*)?)?)?)? test.php?lang=$1&vendor=$3&drvname=$5&action=$7&filename=$8 [NS,NC,L]

Подробнее...

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 17:11 11-09-2007 | Исправлено: mtxd, 17:14 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd
 
Откуда взялись куски кода, выделенные красным? Я ведь давал другие правила.

Код:
RewriteRule ^([a-z]*)/(([a-z]*)/((.*)/(([a-z]*)/(.*)?)?)?)? test.php?lang=$1&vendor=$3&drvname=$5&action=$7&filename=$8 [NS,NC,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 17:37 11-09-2007
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Это немного измененный

Код:
RewriteRule ^([a-z]*)/(([a-z\_]*)/(([a-z\_]*)/([a-z\_]*/([a-z\_]*)?)?)?)? index.php?lang=$1&vendor=$3&drvname=$5&action=$6&filename=$7 [NS,NC,L]

 
Разницы нет, результат один и тот же, просто переделал под ситуацию, где в имени встречаются скобки и пробелы.

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 17:44 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd
А теперь сравним

Код:
RewriteRule ^([a-z]*)/(([a-z\_]*)/(([a-z\_]*)/([a-z\_]*/([a-z\_]*)?)?)?)? index.php?lang=$1&vendor=$3&drvname=$5&action=$6&filename=$7 [NS,NC,L]

 
С тем, что я давал буквально на этой странице

Код:
RewriteRule ^([^/]*)/(([^/]*)/(([^/]*)/([^/]*/([^/]*)?)?)?)? index.php?lang=$1&vendor=$3&drvname=$5&action=$6&filename=$7 [NS,NC,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 18:13 11-09-2007
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ситуацию с этим правилом я описал тут.  
Вот лог:
Подробнее...

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 18:22 11-09-2007 | Исправлено: mtxd, 18:23 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd

Цитата:
Ситуацию с этим правилом я описал тут .  

А почему лог был дан для другого правила?
 
Попробуйте

Код:
RewriteRule ^([a-z]*)/(([a-z\_]*)/(([a-z\_]*)/(([a-z\_]*)/([a-z\_]*)?)?)?)? index.php?lang=$1&vendor=$3&drvname=$5&action=$7&filename=$8 [NS,NC,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 18:42 11-09-2007
mtxd

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
А почему лог был дан для другого правила?

Да потому что уже много вариантов перепробовал, а то правило (^([^/]*)/(([^/]*)/...) приводило к ошибке, которую я описал, поэтому привел лог того правила, которое хотя бы работало.
 
Попробовал, премного благодарен Вроде бы и пытался изменить на что-то подобное... Надеюсь больше не придется лезть в это правило, пока не разберусь в регэкспах.
 
Если вдруг что, туда также смертельно сложно будет добавить ещё одну переменную?
 
Добавлено:
Правда дело похоже в (.*) вместо ([a-z\_\(\)]), такая конструкция проходит без ошибки... ее нельзя использвать в данном случае?

Всего записей: 206 | Зарегистр. 29-01-2003 | Отправлено: 18:51 11-09-2007 | Исправлено: mtxd, 18:55 11-09-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtxd

Цитата:
Если вдруг что, туда также смертельно сложно будет добавить ещё одну переменную?  

На самом деле сложно -- так как mod_rewrite позволяет "захватывать" только 9 переменных, фактически это означает, что в правиле должно быть не более 9 пар круглых скобок, а в последнем работающем -- их 8. Для создания еще одного необязательного параметра нужны 2 скобки, а у нас в запасе осталась только одна. Есть способы обхода этого ограничения и, если понадобиться, то опишу.
 

Цитата:
Правда дело похоже в (.*) вместо ([a-z\_\(\)]), такая конструкция проходит без ошибки... ее нельзя использвать в данном случае?

Запись .* означает "все символы, сколько бы их ни было", при этом не обращается внимание на слэши. Если требуется "все символы до ближайшего слэша", то лучше использовать [^/]*

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 19:02 11-09-2007
FastCat



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Лучшe тут наверное спросить. Т.к. вопрос комплексный и касается mod_rewrite и .htaccess ?  
Верней, как заставить mod_rewrite работать только в одной директории на сервере ?
 
Вот кусок моего httpd.conf
 

Код:
 
# forbid access to the entire filesystem by default
<Directory />
    Options None
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
 
# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>
 

 
При таком раскладе файлы .htaccess с правилами для mod_rewrite вызывают на сервере 500-ю ошибку.
 
Собственно, что надо добавть в httpd.conf что  бы mod_rewrite и .htaccess работали в директории /home ?

Код:
 
<Directory "/srv/www/home">
.....
.....
.....
</Directory>
 


Всего записей: 964 | Зарегистр. 06-01-2002 | Отправлено: 23:30 03-10-2007 | Исправлено: FastCat, 23:32 03-10-2007
Xepec

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чем отличаются флаги L и N в RewriteRule?  
На сколько я понял L должен означать конец замены, но почему-то цикл запускается вновь.

Всего записей: 19 | Зарегистр. 20-12-2005 | Отправлено: 10:03 04-10-2007 | Исправлено: Xepec, 10:07 04-10-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xepec
L=last
N=next
ссылка же есть в шапке
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html

Цитата:
# 'last|L' (последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Это соответствует оператору last в Perl или оператору break в  языке C. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований. К примеру, используйте это для преобразования корневого URL из  ('/') в реальный, например, '/e/www/'.
# 'next|N' (следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL снова сопоставляется неким условиям, но не  оригинальный URL, а URL вышедший из последнего правила преобразования. Это соответствует оператору next в Perl или оператору continue из языка C. Используйте этот флаг для перезапуска процесса преобразований, т.е., безусловному переходу на начало цикла.
Однако будьте осторожны, для того чтобы не сделать бесконечный цикл!


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:40 05-10-2007
Xepec

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это я читал, но судя по симтомам, при применении L преобразование url не заканчивается, а просто начинается новый цикл, с новыми параметрами, т.е. тоже самое, что и при N.
 
 
вот пример:  
 
RewriteRule ^index.htm$ index/ [R]
RewriteRule ^index/$ index.htm [L]
 
выдает в итоге бесконечный цикл (если точнее не бесконечный, а пока не max redirect count), вместо того, чтобы [L]:"Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований.".

Всего записей: 19 | Зарегистр. 20-12-2005 | Отправлено: 09:24 05-10-2007
Xepec

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли в таком свете написать правила так, чтобы  
при запросе  index.htm редиректило на index/ а при запросе index/ с использованием RewriteRule переписало его на index.htm?

Всего записей: 19 | Зарегистр. 20-12-2005 | Отправлено: 09:41 08-10-2007
Perf2k2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, есть вопрос по mod_rewrite.
 
Есть определенный сайт, есть файлик htaccess, в нем использую правила наподобии этого:  
 
RewriteRule ^benefits/potreb/(.*).html$ benefits/potreb/index.php?page=$1 [L]
 
Здесь все нормуль, работает. При обращении к адресу benefits/potreb/1.html открывается страница benefits/potreb/index.php?page=1. Но! Нужно сделать так, чтобы нельзя было при этом обратиться к скрипту напрямую, т.е. benefits/potreb/index.php?page=1. Можно ли это организовать как-нибудь?
 
Спасибо.

Всего записей: 10 | Зарегистр. 12-05-2006 | Отправлено: 11:00 25-10-2007
kostyar



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть проблема.  
Перевели сайт на статические ссылки, но в .htaccess дописали правило для того чтобы поисковик переходя по старым ссылкам проиндексировал новые. Но при этом если в адресной строке набрать старую динамическую ссылку, то происходит зацыкливание. Вот как выглядят правила.
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /show_good\.php\?idtov=([0-9]+)(&[^\\]+)?\ HTTP/ [NC]
RewriteRule ^show_good\.php$ /serial-%1.html? [R=301,L]
RewriteRule ^serial-([0-9]+)\.html$ /show_good.php?idtov=$1 [NC,L]
 
P.S. Причем на локальном сервере все номально работает

Всего записей: 29 | Зарегистр. 18-02-2004 | Отправлено: 13:08 27-10-2007
Ryoga67

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ryoga67: запустил сейчас mod_rewrite.so и всё стало работать, только apache грузит процессор на 96% когда на страницу wordpressa пытаюсь зайти, на других скриптах где используется mod_rewrite.so всё нормально и htaccess работает как надо.


Цитата:
Cheery: включить логирование mod_rewrite и смотреть что и как преобразуется.. что нет бесконечных циклов

 
Включил, запустил и попытался зайти на страницу wordpressa итог 966Kb записей.
Загрузил http://coduo.narod.ru/rewriteLog.log
Я не разбираюсь, искал по одинаковым кускам лога, вроде бесконечный цикл, данные меняются только в [rid#58f160/initial/redir#4] выделено жирным:

Код:
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#59a0b8/initial/redir#3] (1) [per-dir E:/Server/www/wordpress/] internal redirect with /wordpress/wordpress/index.php [INTERNAL REDIRECT]
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] add path info postfix: E:/Server/www/wordpress/wordpress -> E:/Server/www/wordpress/wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] strip per-dir prefix: E:/Server/www/wordpress/wordpress/index.php -> wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] applying pattern '.' to uri 'wordpress/index.php'
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) RewriteCond: input='E:/Server/www/wordpress/wordpress' pattern='!-f' => matched
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) RewriteCond: input='E:/Server/www/wordpress/wordpress' pattern='!-d' => matched
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (2) [per-dir E:/Server/www/wordpress/] rewrite wordpress/index.php -> /wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] add per-dir prefix: /wordpress/index.php -> E:/Server/www/wordpress//wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (2) [per-dir E:/Server/www/wordpress/] trying to replace prefix E:/Server/www/wordpress/ with /wordpress/
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (5) strip matching prefix: E:/Server/www/wordpress//wordpress/index.php -> /wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) add subst prefix: /wordpress/index.php -> /wordpress/wordpress/index.php

 
Подскажите, что мне предпринять чтобы решить проблему ?

Всего записей: 53 | Зарегистр. 03-08-2006 | Отправлено: 21:31 22-11-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Apache+mod_rewrite


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru