не отрабатывает RewriteCond %{REQUEST_FILENAME} !-f
не я первый сталкиваюсь с этой проблемой
гуглил но решения так и не нашел
дерево каталогов
- group1
- - index.php
- group2
- - index.php
- catalog.php
речь идет о каталоге
он имеет несколько групп для которых выделены статичные страницы
для отображения элемента каталога используется страница catalog.php
и выполняются запросы вида
catalog.php?g=$1&e=$2
или
catalog.php?e=$2
для реализации чпу я делаю запись в .htaccess
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 полностью не работает
в элементе у меня передается его id номер
то есть это число
таким образом RewriteRule я могу переписать следующим образом
RewriteRule ^(\d+)/ catalog\.php?e=$1 [L]
но опят же, это лишь заглушка
RewriteCond все равно не работает
и в спецификации по mor_rewrite нет конструкции \d
поддерживает он нормальные регекспы
вопрос по поводу RewriteCond все еще остается открытым
или я неправильно понимаю его работу
RewriteRule (.*) _%1 [L]
Полный путь в файловой системе сервера к файлу или скрипту
REQUEST_FILENAME
Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу
'-f' (является ли обычным файлом)
СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом
префиксом '!' (восклицательный знак) для указания несоответствия шаблону
то есть все должно быть верно
p.s: кстати, не экранируй \. в RewriteRule - регулярки работают только для pattern'ов, для замен работают только $n (ведь ты же не экранировал "?"...).
жесть, а я и не догадался
я думал RewriteCond работает для всех RewriteRuleа не только для первой :D
но в таком случае его не очень удобно использовать
точнее не удобно использовать в моем случае :)
Кстати, не знаю, откуда ты берешь русский перевод мана, но на всякий случай - тут официальные доки.
предположим у меня в .htaccess есть запись
при обращении к адресу abc/12/ я попадаю на страницу catalog.php?g=abc&e=12
и при обращении к адресу abc/12/?p=2 я попадаю на туже страницу catalog.php?g=abc&e=12
тоесть все переменные переданные в GET теряются
я понимаю почему это происходит
меня интересует решение этого вопроса
логично что в конечной странице(catalog.php) я могу получить эту переменную посредствам разбора адрес регулярками, но это как-то кривовато
есть конечно еще вариант добавить в .htaccess еще 2 следующие записи
но я хотел бы избежать излишних записей в .htaccess
RewriteRule ^([a-z]+)/(\d+)/$ catalog.php?g=$1&e=$2&%1 [L]
собственно вопрос, а есть ли другие, более человечные методы
Используй флаг QSA - тогда GET-переменные, которые ты вставляешь в выражении будут добавляться к существующим, а не перезаписывать их:
интересно. видел этот флаг, но не думал что он может и так работать
акей, объясни, читая ман по mod_rewrite, КАК ЕЩЕ этот флаг может работать? :) Чё за лень опять, товарищи?! ))))
[quote="Ман по mod_rewrite, гуглица на 1-2"]
- 'qsappend|QSA' (Query String Append, добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление, а не на замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в строку запроса с помощью директив преобразований.
Proger_XP, справочник ходячий, харэ уже готовые ответы давать =))) хотя, если тебе не лень ;)
признаю, мой косяк :( неправильно понял то, что было написано в мане
Обычно проще и быстрее всё пробовать самому, чем спрашивать на форуме, тем более, что у RewriteCond/Rule/... флагов-то всего с десяток на каждую. А так спросил, и душа спокойна - кто-нибудь ответит, чего париться...
Тык это, если всех бесконечно посылать в гугл, то и поговорить-то будет не о чем :)