E4 .htaccess не поддерживает. Но зато поддерживает OnRequest.rules.txt. Его можно положить в корневую папку сайта, и он будет выполняться при каждом запросе.
К примеру: LOGINUID @ 0= | Unauthorized "My Domain" \EOF — запрос авторизации DocumentRoot: d:\!html\ofis\ — изменение DocumentRoot DirectoryIndex: index.html index.pl Uri / 0= | Redirect / — явная пересылка в корень при любом запросе, Wikki не выводится Uri /arxiv* | VirtualRoot: "\\Arxiv\\Arxiv_ofis" — виртуальные каталоги (при отсутствии индексного файла, список файлов не выводится) Movedhttp://www.newdomain.ru/ — пересылка сразу на другой сайт
Разметку Wikki можете посмотреть здесь http://www.eserv.ru/Разметка, или у меня в блоге форума, там выложил то, что ac рассказал, а что и сам "нарыл", может пригодится (пока полного описания нет) http://forum.eserv.ru/~ili_a/EservWiki?mid=4
Правда там немного кривовато отображается, у меня на внутреннем портале все нормально
ili_a, давайте вики называть Wiki, а не Wikki. Все те Wacko и Wakka, которые иногда мелькают на старых вики-страницах сайта — php программы, с которыми у нас ничего общего кроме подмножества вики-разметки, и их родовое заиККание мы имеем право не распространять на название нашей вики. Лучше использовать "E4Wiki", если ничего лучше не придумаем http://forum.eserv.ru/E4Wiki
Если так заработает, то сделаю сокращенную форму записи таких правил — обёртку вокруг универсального PcreGetMatch.
P.S. Не сделал этого раньше, т.к. апачевый mod_rewrite сильно недолюбливаю. Он нужен только тем php-программам, которые не умеют работать с переменной PATH_INFO, а "красивые URL" иметь хотят. Обычно при запуске таких программ под Eserv достаточно положить такой программе в корень маленький 404.php с обработкой (выборкой из PATH_INFO) этих параметров там. Получается нормальный код и значительная экономия на регэкспах (полное их отсутствие в основном цикле обработке URL'ов).
Но раз у вас "там таких полно", то, конечно, проще перенести готовые правила PCRE всей пачкой, а не возиться с каждым по отдельности. Так что испытайте на каком-нибудь одном, а я потом добавлю команду похожую на RewriteRule.
Прямо руки потираю в предвкушении (жалко смайлика такого нет )
ac пишет: Если так заработает
Буду пробовать.
ac пишет: Он нужен только тем php-программам, которые не умеют работать с переменной PATH_INFO
К сожалению, мне этот код достался "as is". За большие деньги был написан сайт, который я теперь периодически "дотачиваю напильником" И чтобы для тестирования сделать его доступным в сети ( а не только у меня на машине с апачем), хотела воспользоваться Е4. При этом не хочется, чтобы сильно отличался код в локальном варианте и боевом, а то запутаюсь.
ac пишет: достаточно положить такой программе в корень маленький 404.php
цитирование поломалось — Не, у меня в ФФ тоже не работает.
Сейчас уже ничего не процитирую, 100 раз все поменяла. . Как-то странно, на одном и том же OnRequest.rules.txt то страница показывается без всяких EXCEPTION , а то при обновлении (по F5) выдает кучу EXCEPTION. А потом еще неск. раз F5 — и никаких ошибок...Сейчас в OnRequest.rules.txt вот что:
matveeva пишет: цитирование поломалось — Не, у меня в ФФ тоже не работает.
Да, это я поломал цитирование в очередной раз. Уже починил, жмите F5.
PCRE скомпилировал в выходные из текущих исходников pcre.org. http://www.eserv.ru/download/acWEB_2010-09-13_1.rar
У меня с вашими regexp'ами exception не вызывает. Наверное еще от каких-то факторов зависит — исходного url'а, например.
matveeva пишет: "Наш сайт // about/
Здесь ничего нет (NP)" Ну и прочие адреса вида "http://delica.local:3130/что-то/" тоже попадают на "Здесь ничего нет".
, то страница "http://delica.local:3130/что-то/" открывается, но пропадает все форматирование( цвет, фон и т.д.) (на всех страницах). Перестает почему-то работать ссылка "http://delica.local:3130/projects/31/" , хотя она должна была по-другому правилу перенаправиться. В общем, не понимаю.
Может там несколько раз меняется URL, проходя по списку? Можно в конце строк ставить "\EOF". И смотреть по http-логу, как проходит замена (в логе вместо исходного URL будет показана его замена по этим правилам).
А в acWEB.log всё нормально, никаких exception'ов?
ac пишет: Может там несколько раз меняется URL, проходя по списку?
Прочитала, что в стандартных .htaccess правила выполняются от первого до последнего, последовательно преобразовывая URL, если только в конце не поставить [L]. Попробовала поставить, ничего не меняется. Я даже оставила только первое правило, остальные выкинула вовсе, но все равно "http://delica.local:3130/что-то/" попадает на "Ничего нет" Как-то странно. Сейчас по журналу посмотрю еще.
matveeva пишет: А в acWEB.log всё нормально, никаких exception'ов?
Никаких! Все чисто. Появились новые записи, раньше не замечала таких.
matveeva пишет: Первое правило вообще никак не отрабатывает...
Я бы там тоже убрал последний "(/)". А почему "пропадает форматирование" — наверное css'ы по этому или другим правилам тоже в site.php превращаются, надо посмотреть в исходном html-тексте, что там в страницу включается, а по логу — во что превращается. Тогда придумаем, как лишние замены исключить.
И еще можно попробовать вернуть "^" и "&", которые в исходных правилах были. Я их сначала убрал, т.к. они вроде как бессмысленны — в URL'ах нет переводов строк — но это несколько меняет смысл правил, т.к. без этих ограничителей они могут срабатывать на часть строки. Опция multiline в pcre включена, так что должны эти "^" и "&" работать как и в апачах, наверное.
Да, если поставить ограничители на всех правилах, то работает только "http://delica.local:3130/" и с форматированием. Все остальные ссылки дают "Здесь ничего нет".
А, вот еще забыла. Может, поможет в расследовании. Еще есть файлик index.php, который я пока переименовала. Если же его восстановить, то вместо "ничего нет", будем попадать на него.
matveeva пишет: Не работает "http://delica.local:3130/ofprop/1/", т.к. срабатывает первое правило из последней группы. а не третье, как должно было бы.
Про это, кажется, поняла. В регулярных выражениях ^ обозначает начало, а — $ конец строки. Если их нет, то сравнение работает на наличие подстроки, а не точное совпадение. Поэтому выражение "http://delica.local:3130/ofprop/1/" попадает в первое правило, если там нет ограничителей. Т.к. присутствует комбинация ([a-zA-Z0-9_-]+)(/)? и за ней еще разрешенный хвостик. А если ставить ограничители, то совпадение должно быть точным, и хвост не допускаются. Поэтому первое правило не работает, и срабатывает третье.
подряд. Это мне для экспериментов надо. Как-то строка странно передается в разбор. Напр. ссылка "http://delica.local:3130/projects/31/" работает для варианта
matveeva пишет: Так что, видимо, строка передается вместе со слешом. вот.
А, ну да, так и есть, все пути в URI в acWEB начинаются с "/". Тут выходит несовместимость с апачевыми регэкспами, но, imho, это всё-таки правильнее.
matveeva пишет: Это мне для экспериментов надо.
Если нужно вставлять пойманные в (...) подстроки не в том порядке, в каком они идут в ловушках, то придётся это более длинно через GetMatch решать. Но это, по-моему, несколько надуманная проблема. Т.к. в php порядок параметров не важен, и лишние параметры тоже не проблема. Т.е. лишний $1 можно загнать в лишнюю (не анализируемую скриптом) переменную, и всё. А ваш пример RewriteRule ^(.*)/data/menu([0-9]+).xml$ /data/menu$2.xml [L] (который этим способом не решить) надо просто другим regexp'ом записывать, без первых скобок (раз всё равно на выброс) — RewriteRule ^.*/data/menu([0-9]+).xml$ /data/menu{s}.xml \EOF.
ред: 09.09.2010 13:46
К примеру:
LOGIN UID @ 0= | Unauthorized "My Domain" \EOF — запрос авторизации
DocumentRoot: d:\!html\ofis\ — изменение DocumentRoot
DirectoryIndex: index.html index.pl
Uri / 0= | Redirect / — явная пересылка в корень при любом запросе, Wikki не выводится
Uri /arxiv* | VirtualRoot: "\\Arxiv\\Arxiv_ofis" — виртуальные каталоги (при отсутствии индексного файла, список файлов не выводится)
Moved http://www.newdomain.ru/ — пересылка сразу на другой сайт
ред: 13.06.2012 21:38
Правда там немного кривовато отображается, у меня на внутреннем портале все нормально
ред: 09.09.2010 07:56
ред: 09.09.2010 13:18
Насколько я понимаю, будут работать любые правила написанные на встроенном языке. Видимо вам надо смотреть
Указанное RewriteRule тогда запишется как-то так:
Если так заработает, то сделаю сокращенную форму записи таких правил — обёртку вокруг универсального PcreGetMatch.
P.S. Не сделал этого раньше, т.к. апачевый mod_rewrite сильно недолюбливаю. Он нужен только тем php-программам, которые не умеют работать с переменной PATH_INFO, а "красивые URL" иметь хотят. Обычно при запуске таких программ под Eserv достаточно положить такой программе в корень маленький 404.php с обработкой (выборкой из PATH_INFO) этих параметров там. Получается нормальный код и значительная экономия на регэкспах (полное их отсутствие в основном цикле обработке URL'ов).
Но раз у вас "там таких полно", то, конечно, проще перенести готовые правила PCRE всей пачкой, а не возиться с каждым по отдельности. Так что испытайте на каком-нибудь одном, а я потом добавлю команду похожую на RewriteRule.
Буду пробовать.
К сожалению, мне этот код достался "as is". За большие деньги был написан сайт, который я теперь периодически "дотачиваю напильником" И чтобы для тестирования сделать его доступным в сети ( а не только у меня на машине с апачем), хотела воспользоваться Е4. При этом не хочется, чтобы сильно отличался код в локальном варианте и боевом, а то запутаюсь.
Таких хитростей я не знала, попробую, спасибо.
:-[ 7 строк... Не так и полно, конечно.
Ок, спасибо.
ред: 13.09.2010 11:08
Процитируйте сюда, что там имеет место быть.
P.S. Это у меня с установкой новой Оперы цитирование поломалось или что-то в новом acWEB?
Сейчас уже ничего не процитирую, 100 раз все поменяла. . Как-то странно, на одном и том же OnRequest.rules.txt то страница показывается без всяких EXCEPTION , а то при обновлении (по F5) выдает кучу EXCEPTION. А потом еще неск. раз F5 — и никаких ошибок...Сейчас в OnRequest.rules.txt вот что:
А вызываю http://delica.local:3130/site.php
Да, это я поломал цитирование в очередной раз. Уже починил, жмите F5.
PCRE скомпилировал в выходные из текущих исходников pcre.org. http://www.eserv.ru/download/acWEB_2010-09-13_1.rar
У меня с вашими regexp'ами exception не вызывает. Наверное еще от каких-то факторов зависит — исходного url'а, например.
Теперь ваши правила можно записать в таком виде:
"Наш сайт // about/
Здесь ничего нет (NP)" Ну и прочие адреса вида "http://delica.local:3130/что-то/" тоже попадают на "Здесь ничего нет".
ред: 14.09.2010 10:20
Это E4Wiki открывается, попробуйте добавить
ред: 14.09.2010 10:42
Можно, конечно, и так, но не совсем правильно на мой взгляд. Понять хочется. На ней это не скажется, ведь это файлик с правилами действует только для конкретного домена.
Если в правиле
Что-то у меня пост один съелся...
Если правило
А в acWEB.log всё нормально, никаких exception'ов?
ред: 14.09.2010 11:59
Никаких! Все чисто. Появились новые записи, раньше не замечала таких.
Вызов "http://delica.local:3130/about/" пишет в журнале след.:
Первое правило вообще никак не отрабатывает...
Кстати, да. Обновление вчерашнее скачалось. Вы его установили?
Вот это как раз должно было пропасть после установки обновлений.
Я бы там тоже убрал последний "(/)". А почему "пропадает форматирование" — наверное css'ы по этому или другим правилам тоже в site.php превращаются, надо посмотреть в исходном html-тексте, что там в страницу включается, а по логу — во что превращается. Тогда придумаем, как лишние замены исключить.
Именно! Так все и происходит. По журналу видно, что при нормальном отображении идет обращение сначала к site.php? а потом ко всяким css и явам:
А когда без форматирования там так:
А в тексте стоят ссылки:
Да-да, я зюки перепутал. Должно быть "$".
Значит еще раз привожу содержимое файла OnRequest.rules.txt, чтобы не путаться
Ну и еще там есть закомментированные строки "\ ".
В этом варианте работает "http://delica.local:3130/", "http://delica.local:3130/about/", форматирование есть. Не работает "http://delica.local:3130/ofprop/1/", т.к. срабатывает первое правило из последней группы. а не третье, как должно было бы.
Если же написать в первом правиле ограничители:
Мозг кипит...
А, вот еще забыла. Может, поможет в расследовании. Еще есть файлик index.php, который я пока переименовала. Если же его восстановить, то вместо "ничего нет", будем попадать на него.
Вот откройте этот URL в браузере и добейтесь, чтобы он показывал именно style.css, т.е. чтобы на нем RewriteRules не срабатывали.
А у нас пишется
Кстати, если в группу символов добавить слеш, то правило срабатывает:
Везде поставила "RewriteRule ^/([a-....." Все работает, форматирование на месте.
Спасибо за помощь.
А, ну да, так и есть, все пути в URI в acWEB начинаются с "/". Тут выходит несовместимость с апачевыми регэкспами, но, imho, это всё-таки правильнее.
Если нужно вставлять пойманные в (...) подстроки не в том порядке, в каком они идут в ловушках, то придётся это более длинно через GetMatch решать. Но это, по-моему, несколько надуманная проблема. Т.к. в php порядок параметров не важен, и лишние параметры тоже не проблема. Т.е. лишний $1 можно загнать в лишнюю (не анализируемую скриптом) переменную, и всё. А ваш пример RewriteRule ^(.*)/data/menu([0-9]+).xml$ /data/menu$2.xml [L] (который этим способом не решить) надо просто другим regexp'ом записывать, без первых скобок (раз всё равно на выброс) — RewriteRule ^.*/data/menu([0-9]+).xml$ /data/menu{s}.xml \EOF.