Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не отрабатывает RewriteCond %{REQUEST_FILENAME} !-f

312
18 января 2010 года
dead_star
392 / / 26.11.2006
проблема довольна банальная
не я первый сталкиваюсь с этой проблемой
гуглил но решения так и не нашел

дерево каталогов
- group1
- - index.php
- group2
- - index.php
- catalog.php

речь идет о каталоге
он имеет несколько групп для которых выделены статичные страницы

для отображения элемента каталога используется страница catalog.php
и выполняются запросы вида
catalog.php?g=$1&e=$2
или
catalog.php?e=$2

для реализации чпу я делаю запись в .htaccess
 
Код:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/(.+?)/ catalog\.php?g=$1&e=$2 [L]
RewriteRule ^(.+?)/ catalog\.php?e=$1 [L]

для запросов вида /group2/11/ и /11/ все нормально отрабатывает и я попадаю на страницу /catalog.php
но для запроса /group2/ я тоже попадаю на страницу /catalog.php
вместо того чтоб попадать на страницу /group2/index.php
то есть получается что RewriteCond полностью не работает
312
19 января 2010 года
dead_star
392 / / 26.11.2006
решение нашел
в элементе у меня передается его id номер
то есть это число
таким образом RewriteRule я могу переписать следующим образом
 
Код:
RewriteRule ^(.+?)/(\d+)/   catalog\.php?g=$1&e=$2 [L]
RewriteRule ^(\d+)/     catalog\.php?e=$1 [L]

но опят же, это лишь заглушка
RewriteCond все равно не работает
и в спецификации по mor_rewrite нет конструкции \d
312
19 января 2010 года
dead_star
392 / / 26.11.2006
плохо я все таки ман читал:(
поддерживает он нормальные регекспы
вопрос по поводу RewriteCond все еще остается открытым
312
23 января 2010 года
dead_star
392 / / 26.11.2006
может хоть кто-нибудь скажет мне почему может не работать RewriteCond
или я неправильно понимаю его работу
253
23 января 2010 года
Proger_XP
1.5K / / 07.08.2004
Ты уверен, что %{REQUEST_FILENAME} содержит именно то, что тебе нужно? Проверить можно, например, так:
 
Код:
RewriteCond %{REQUEST_FILENAME} ^(.*)$
RewriteRule (.*) _%1 [L]
312
23 января 2010 года
dead_star
392 / / 26.11.2006
проверил, как и ожидалось
Полный путь в файловой системе сервера к файлу или скрипту

Цитата:
Следующее за RewriteCond правило преобразования используется только тогда, когда URI соответствует условиям этой директивы

REQUEST_FILENAME
Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу

'-f' (является ли обычным файлом)
СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом

префиксом '!' (восклицательный знак) для указания несоответствия шаблону


то есть все должно быть верно

253
23 января 2010 года
Proger_XP
1.5K / / 07.08.2004
У тебя оба RewriteCond влияют только на первый RewriteRule. То есть, для /group2/ у тебя выполняется
 
Код:
RewriteRule ^(.+?)/ catalog\.php?e=$1 [L]


p.s: кстати, не экранируй \. в RewriteRule - регулярки работают только для pattern'ов, для замен работают только $n (ведь ты же не экранировал "?"...).
312
23 января 2010 года
dead_star
392 / / 26.11.2006
проверил, действительно так
жесть, а я и не догадался
я думал RewriteCond работает для всех RewriteRuleа не только для первой :D
253
23 января 2010 года
Proger_XP
1.5K / / 07.08.2004
Нет конечно, если у тебя их штук 20 в одном .htaccess, как ты их разруливал бы в конце файла? :)
312
23 января 2010 года
dead_star
392 / / 26.11.2006
ну да, некий смысл в этом есть
но в таком случае его не очень удобно использовать
точнее не удобно использовать в моем случае :)
253
23 января 2010 года
Proger_XP
1.5K / / 07.08.2004
Угу, я тоже иногда сталкиваюсь со странными (на первый взгляд) ограничениями mod_rewrite. Правда, народ настолько активно его использует, что скорее всего это я не знаю, как правильно сделать.
Кстати, не знаю, откуда ты берешь русский перевод мана, но на всякий случай - тут официальные доки.
92
23 января 2010 года
Тень Пса
2.2K / / 19.10.2006
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html - перевод на русский
312
01 апреля 2010 года
dead_star
392 / / 26.11.2006
вот тут еще один вопрос возник с тем же модреврайтом
предположим у меня в .htaccess есть запись
 
Код:
RewriteRule ^([a-z]+)/(\d+)/$ catalog.php?g=$1&e=$2 [L]

при обращении к адресу abc/12/ я попадаю на страницу catalog.php?g=abc&e=12
и при обращении к адресу abc/12/?p=2 я попадаю на туже страницу catalog.php?g=abc&e=12
тоесть все переменные переданные в GET теряются
я понимаю почему это происходит
меня интересует решение этого вопроса
логично что в конечной странице(catalog.php) я могу получить эту переменную посредствам разбора адрес регулярками, но это как-то кривовато

есть конечно еще вариант добавить в .htaccess еще 2 следующие записи
но я хотел бы избежать излишних записей в .htaccess
 
Код:
RewriteCond %{QUERY_STRING} (^.+$)
RewriteRule ^([a-z]+)/(\d+)/$ catalog.php?g=$1&e=$2&%1 [L]

собственно вопрос, а есть ли другие, более человечные методы
253
01 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: dead_star
вот тут еще один вопрос возник с тем же модреврайтом


Используй флаг QSA - тогда GET-переменные, которые ты вставляешь в выражении будут добавляться к существующим, а не перезаписывать их:

 
Код:
RewriteRule ^([a-z]+)/(\d+)/$ catalog.php?g=$1&e=$2 [QSA,L]
312
01 апреля 2010 года
dead_star
392 / / 26.11.2006
Цитата: Proger_XP
Используй флаг QSA - тогда GET-переменные, которые ты вставляешь в выражении будут добавляться к существующим, а не перезаписывать их:



интересно. видел этот флаг, но не думал что он может и так работать

92
01 апреля 2010 года
Тень Пса
2.2K / / 19.10.2006
Цитата: dead_star
интересно. видел этот флаг, но не думал что он может и так работать


акей, объясни, читая ман по mod_rewrite, КАК ЕЩЕ этот флаг может работать? :) Чё за лень опять, товарищи?! ))))

[quote="Ман по mod_rewrite, гуглица на 1-2"]

  • 'qsappend|QSA' (Query String Append, добавлять строку запроса)
    Этот флаг указывает механизму преобразований на добавление, а не на замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в строку запроса с помощью директив преобразований.
[/quote]

Proger_XP, справочник ходячий, харэ уже готовые ответы давать =))) хотя, если тебе не лень ;)
312
02 апреля 2010 года
dead_star
392 / / 26.11.2006
Цитата: Тень Пса
акей, объясни, читая ман по mod_rewrite, КАК ЕЩЕ этот флаг может работать? :) Чё за лень опять, товарищи?! ))))


признаю, мой косяк :( неправильно понял то, что было написано в мане

253
02 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
признаю, мой косяк неправильно понял то, что было написано в мане


Обычно проще и быстрее всё пробовать самому, чем спрашивать на форуме, тем более, что у RewriteCond/Rule/... флагов-то всего с десяток на каждую. А так спросил, и душа спокойна - кто-нибудь ответит, чего париться...

Цитата: Тень Пса
Proger_XP, справочник ходячий, харэ уже готовые ответы давать =))) хотя, если тебе не лень ;)


Тык это, если всех бесконечно посылать в гугл, то и поговорить-то будет не о чем :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог