RewriteRule - простая банальная ошибка , помогите побороть ее...

mar_a

Новичок
RewriteRule - простая банальная ошибка , помогите побороть ее...

Необходимо :
URL :
http://localhost/tmp/800x600/?volume=100&volume2=max

Преобразовать в URL :
http://localhost/tmp/index.php?volume=100&volume2=max&value=800x600
Или http://localhost/tmp/index.php?value=800x600&volume=100&volume2=max

Путь решения был такой :
Пример моего .htaccess :
PHP:
RewriteEngine On
RewriteBase /tmp/
RewriteRule ^([^/]*)/(.*)$ index.php?value=$1&$2
Явно неправильный ...
Тогда :
PHP:
RewriteEngine On
RewriteBase /tmp/
RewriteRule ^([^/]*)/$ index.php?value=$1
RewriteRule ^([^/]*)/(.*)$ index.php?value=$1&$2
но и такой тоже неработает

Хотя первое условие выполняется ...
т.е. http://localhost/tmp/index.php?value=800x600 добиться удалось , но вот остальная часть ?volume=100&volume2=max - теряется ...
Помогите плиз...
 

mar_a

Новичок
zuzmic
100 лет живи - 100 лет учись
Спасибо дорогой!!!

-~{}~ 24.01.08 18:19:

Теперь к этому прикручиваю обработку и указание на картинки
Если в УРЛе встречается /image/ то . http://localhost/image/kartinka.jpg

А именно :

RewriteEngine On
RewriteBase /
RewriteRule ^/image/(.*)$ http://localhost/image/$1
RewriteRule ^([^/]*)/(.*)$ /index.php?value=$1&$2 [QSA]

Если я неошибаюсь то должно быть так но увы комбинация неработает , значит делаю гениальный вывод в том что я ошибаюсь.
Только опять где-то тут
RewriteRule ^/image/(.*)$ http://localhost/image/$1

Как правильно ???
 

mar_a

Новичок
Автор оригинала: Gas
флаг [L]
За ман спасибо конечно , и за флаг который я постоянно забываю...

Флаг [L] - дает разрешение на продолжение поиска соответствия по правилам (шаблонам).
Тут не работает конструкция:

RewriteEngine On
RewriteBase /
RewriteRule ^/images/(.+)$ http://localhost/images/$1 [L]

Неважно L без L .
Т.е. что мне надо если в УРЛ встречается поддериктория /images/
то значит принудительно ломится на http://localhost/images/$1
таким образом я хочу добиться прямого вызова картинок.

Еще раз
Необходимо :
URL :
http://localhost/tmp/800x600/images/logo.gif

Преобразовать в URL :
http://localhost/images/logo.gif

Разумеется оставив при этом правило :
URL :
http:// localhost/tmp/800x600/?volume=123&volume2=max

Преобразовать в URL :
http:// localhost/tmp/index.php?volume=123&volume2=max&value=800x600



Поэтому я и спрашиваю как правильно ?

Спасибо всем заранее...
 

SiMM

Новичок
В Rewrite, если не ошибаюсь, не передаётся начальный слэш. Это раз. Зачем делать редирект через HTTP - это два.
 

mar_a

Новичок
1) Со слешем проэксперементирую ... - непомогло !
2) Через http:// - делаю редирект что-бы на 100% быть уверенным в том что запрос будет направлен по мною назначенному пути , а не переметнется скажем в существующую директорию tmp - как например...
Опять таки если есть 100% верный способ нестесняйтесь пишите как правильно...

Поигрался утсановил путь вместо http:// - /var/www/localhost/
сдвига пока никакого нет...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
таким образом я хочу добиться прямого вызова картинок
Как правило прямой вызов нужен не только для картинок.

RewriteCond
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html#rewritecond

-~{}~ 25.01.08 11:44:

1) Со слешем проэксперементирую ... - непомогло !
Как експерементировали?

вместо http:// - /var/www/localhost/
1. Мануал читал?
2. Куда установил? Где пример?
 

mar_a

Новичок
0)Что эксперементировал так это убирал слеш из строки
RewriteRule ^/images/(.*)$ http://localhost/images/$1 [L]
на
RewriteRule ^images(.*)$ http://localhost/images/$1 [L]

1) Мануал как на зло читал , даже взял пример оттуда :
из мана дословно :
RewriteRule ^/(.*)$ http://fully.qualified.domain.name/$1 [L,R]

Постарался применить к своему примеру и вышло (но незаработало)
RewriteRule ^/images/(.*)$ http://localhost/images/$1 [L,R]

Да пробовал
RewriteRule ^/images/(.*)$ /var/www/localhost/images/$1 [L,R]
все без толку...
Может RewriteRule - как правило неправильно написано , я имею ввиду шаблон ?

2)Поставил в .htaccess разумеется (единственное правило ради тестов):

RewriteEngine On
RewriteBase /
RewriteRule ^/images$ http://localhost/images/$1 [L,R]

и с флагами и без (думаю излишне примеры писать).
Ничего неработает...
Т.е. при вызове
http://localhost/tmp/800x600/images/logo.gif
выдается 500 ошибка.
Какие будут еще предложения ?

Gas
Да ты прав , нет директории http://localhost/tmp/800x600/
Есть http://localhost/tmp/
.htaccess лежит именно вней !!!!

А картинка в директории : http://localhost/images/

Виноват если необъяснил это!!! :(
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
mar_a
Проверяй, например, RewriteCond-ом расширение запрашиваемых файлов
если условие не соблюдается - применяй RewriteRule

-~{}~ 25.01.08 12:31:

Вообще, очень часто используют такое.

Проверяют
1. Существование директории
2. Существование файла.

Если не существует, тогда используют реврайт
 

Gas

может по одной?
mar_a
для преобразования частного случая:
http://localhost/tmp/800x600/images/logo.gif
в
http://localhost/images/logo.gif
и .htaccess в папке tmp:

RewriteEngine On
RewriteBase /tmp/
RewriteRule ^(images/.+)$ /$1 [L]

насчёт [L] я не совсем прав,
следующий
RewriteRule ^([^/]*)/(.*)$ /index.php?value=$1&$2 [QSA]
вызовет зацикливание, вот Mr_Max'а послушай
 

mar_a

Новичок
Mr_Max
Спасибо за совет но в images находяться не только картинки но и css js gif jpeg jpg png + и т.д.
так что теоретически можно для каждого из расширений делать проверку , но мне показалось что перенаправить
по такому шаблону
RewriteRule ^/images/(.*)$ http://localhost/images/$1 [L,R]
было-бы проще.

Но увы ...
Если я правильно понял то необходимо попытаться сделать следующее :

RewriteCond %{REQUEST_URI} !^(.*)[gif|jpg|psd|cdr|css|png|zip|tar|gz|bmp|rar|xls|doc|swf|pdf|xml|ttf|wav]$

RewriteRule ^/images/(.*)$ http://localhost/images/$1 [L]
Но ситуацию это неспасло...
 

SiMM

Новичок
> Но ситуацию это неспасло...
И не спасёт, пока Вы вместо отладки будете продолжать свои танцы с бубном.
Есть логи сервера, есть опция mod_rewrite, позволяющая изменять уровень детализации логов, есть документация.
 

Michael_X

Новичок
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

для проверки сначало на то, или есть реальный файл на сервере. (добавлять перед правилами)
и надо танцевать с бубном =)
 

mar_a

Новичок
SiMM
RewriteLog "my_test.txt"
Он пустой ... хотя :
RewriteLogLevel 3
Это что касается файлов с бубном.
В апаче прописал вручную сразу после
RewriteEngine On
RewriteLog - и указал путь к файлу "my_test.txt"
Но в этот файл ничего не пишеться и при таком подключении в общих логах мы имеем :
RewriteLog not allowed here
RewriteLogLevel not allowed here



Пока пользуюсь error.log при отладке правила
RewriteRule ^(images/.+)$ /$1 [L]
и
RewriteRule ^/images/(.*)$ http://localhost/images/$1 [L,R]
Дают один и тот-же результат :
[Fri Jan 25 15:44:49 2008] [error] [client 127.0.0.1] File does not exist: y:/home/localhost/800x600/images/logo.gif

Почему лезет в виртуальный каталог /800x600/ ???

Mr_Max
Читал но
!^(.*)[gif|jpg|psd|cdr|css|png|zip|tar|gz|bmp|rar|xls|doc|swf|pdf|xml|ttf|wav]$
взято не из мана эт переделал для моего случая...

Хотя я так понял что определять конкретно каждый файл (его расширение) ненадо
Достаточно видно простого
RewriteCond %{REQUEST_FILENAME} !-d - - -Для директорий
RewriteCond %{REQUEST_FILENAME} !-f - Для файлов
(Отдельное спасибо Michael_X)
-----------------------------------------------------------------------------------------------

Соврал поповоду RewriteLogLevel
Вот привожу:
Првило:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /tmp/
RewriteRule ^(images/.*)$ /images/$1 [L]

127.0.0.1 - - [25/Jan/2008:15:52:32 +0200] [localhost/sid#a352d0][rid#23c6a60/initial] (3) [per-dir y:/home/localhost/tmp/] add path-info postfix: y:/home/localhost/tmp/123x123 -> y:/home/localhost/tmp/123x123/images/logo.gif
127.0.0.1 - - [25/Jan/2008:15:52:32 +0200] [localhost/sid#a352d0][rid#23c6a60/initial] (3) [per-dir y:/home/localhost/tmp/] strip per-dir prefix: y:/home/localhost/tmp/123x123/images/logo.gif -> 123x123/images/logo.gif
127.0.0.1 - - [25/Jan/2008:15:52:32 +0200] [localhost/sid#a352d0][rid#23c6a60/initial] (3) [per-dir y:/home/localhost/tmp/] applying pattern '^(images/.*)$' to uri '123x123/images/logo.gif'
127.0.0.1 - - [25/Jan/2008:15:52:32 +0200] [localhost/sid#a352d0][rid#23c6a60/initial] (1) [per-dir y:/home/localhost/tmp/] pass through y:/home/localhost/tmp/123x123

123x123 - такого каталога нет ... (просто замахался писать 800х600 - а то еще и сам поверю что он есть:) )
 
Сверху