Apache 1.3.37
» mod_rewrite: документация, готовые решения, вопросы
Cheery
Terby
Дело в том, что если правила описывать правила mod_rewrite описываются в httpd.conf, то то обрабатываемый путь будет содержить ведущий слэш, а если его описывать в .htaccess, то ведущего слэша не будет, т.е. правило
Код: RewriteRule ^(.*)$ http://www.domain.ru$1
Terby
Дело в том, что если правила описывать правила mod_rewrite описываются в httpd.conf, то то обрабатываемый путь будет содержить ведущий слэш, а если его описывать в .htaccess, то ведущего слэша не будет, т.е. правило
Код: RewriteRule ^(.*)$ http://www.domain.ru$1
dacuan
Цитата:
ок.. не экспериментировал.. но все равно.. довольно странно у него ведет - должен всегда запрашивать сначала пароль. сдается мне, что его браузер как то неправильно интерпретирует заголовки.
Цитата:
Дело в том, что если правила описывать правила mod_rewrite описываются в httpd.conf, то то обрабатываемый путь будет содержить ведущий слэш, а если его описывать в .htaccess, то ведущего слэша не будет, т.е. правил
ок.. не экспериментировал.. но все равно.. довольно странно у него ведет - должен всегда запрашивать сначала пароль. сдается мне, что его браузер как то неправильно интерпретирует заголовки.
дело не в браузере, у меня их три и все ведут себя одинаково
При запросе запаролленной дириктории без www вот, что пишется в тексте соединения:
WWW-Authenticate: Basic realm="Private zone"
После этой строчки апач сразу же пишет сие чудо:
Location: http://www.domain.ru/401.shtml
и это ненормально
При запросе запаролленной дириктории без www вот, что пишется в тексте соединения:
WWW-Authenticate: Basic realm="Private zone"
После этой строчки апач сразу же пишет сие чудо:
Location: http://www.domain.ru/401.shtml
и это ненормально
Немного порылся в этом mod_rewrite и обнаружил следующее:
Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^?]+)? index.php?link=$1 [NC,QSA,L]
Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^?]+)? index.php?link=$1 [NC,QSA,L]
kenny_sk8
смени link в index.php?link=$1 на другую переменную
смени link в index.php?link=$1 на другую переменную
Задача.
Нужно выполнить только одно из описанных правил:
RewriteRule ^/test1/$ /test2/ [L]
RewriteRule ^(.*)$ /test3/ [L]
при заходе по ссылке /test1/ ?
Как это добится? [L] говорит лишь о том, что за одну итерацию не нужно дальше применять правила. Но как только произойдет отработка первого правила, ссылка прогоняется вновь через все правила, и срабатывает второе.
Нужно при заходе на /test1/ сделать перенаправление на /test2/.
Все остальные запросы на /test3/.
А сейчас получается все перенаправляется на /test3/.
Можно ли как-то без усложнения регэкспов (без уточнения отсутсвия /test1/ во втором правиле), выполнить только одно из правил?
Нужно выполнить только одно из описанных правил:
RewriteRule ^/test1/$ /test2/ [L]
RewriteRule ^(.*)$ /test3/ [L]
при заходе по ссылке /test1/ ?
Как это добится? [L] говорит лишь о том, что за одну итерацию не нужно дальше применять правила. Но как только произойдет отработка первого правила, ссылка прогоняется вновь через все правила, и срабатывает второе.
Нужно при заходе на /test1/ сделать перенаправление на /test2/.
Все остальные запросы на /test3/.
А сейчас получается все перенаправляется на /test3/.
Можно ли как-то без усложнения регэкспов (без уточнения отсутсвия /test1/ во втором правиле), выполнить только одно из правил?
Ребята... уже нет просто сил... дня 3 сижу уже, перерыт весь инет, и все напрасно.
Задача тривиальная!
из URL: hттp://xxx.msk.ru/index.php?p=page03
получить URL: hттp://xxx.msk.ru/page03.html
Пробовал все варианты:
------------------
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?p=$1 [L]
------------------
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)/(.*)$ $1index.php?p=$2
------------------
RewriteEngine on
RewriteBase /
Options +FollowSymlinks
RewriteRule ^data/([a-zA-Z0-9]+)\.html$ /index.php?p=$1
------------------
и многие другие - НЕ РАБОТАЕТ зараза!
Вроде не совсем чайник, сервак свой, стоит Server Version: Apache/1.3.37 (Unix) PHP/4.4.4, mod_rewrite включен, включаю отладку мода в httpd.conf - в лог mod_rewrite_log валятся строки типа:
81.222.220.85 - - [05/Mar/2007:01:08:59 +0300] [xxx.msk.ru/sid#8097184][rid#80f5034/initial] (1) [per-dir /home/xxx.msk.ru/public_html/] pass through /home/xxx.msk.ru/public_html/forum/index.php
т.е. модуль mod_rewrite работает однозначно, но вот как он работает... не понимаю...
.htaccess работает 100%, проверял.
похоже что все-таки что-то с настройкой мода, подскажите плиз где рыть...
причем похоже перестали работать и ранее работавшие строки:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^hттp://(www.)?xxx.msk.ru(/)?.*$ [NC]
RewriteRule .*\.(pdf|rar|zip)$ hттp://xxx.msk.ru/error.php [R,NC]
Спасибо всем большое заранее!
Задача тривиальная!
из URL: hттp://xxx.msk.ru/index.php?p=page03
получить URL: hттp://xxx.msk.ru/page03.html
Пробовал все варианты:
------------------
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?p=$1 [L]
------------------
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)/(.*)$ $1index.php?p=$2
------------------
RewriteEngine on
RewriteBase /
Options +FollowSymlinks
RewriteRule ^data/([a-zA-Z0-9]+)\.html$ /index.php?p=$1
------------------
и многие другие - НЕ РАБОТАЕТ зараза!
Вроде не совсем чайник, сервак свой, стоит Server Version: Apache/1.3.37 (Unix) PHP/4.4.4, mod_rewrite включен, включаю отладку мода в httpd.conf - в лог mod_rewrite_log валятся строки типа:
81.222.220.85 - - [05/Mar/2007:01:08:59 +0300] [xxx.msk.ru/sid#8097184][rid#80f5034/initial] (1) [per-dir /home/xxx.msk.ru/public_html/] pass through /home/xxx.msk.ru/public_html/forum/index.php
т.е. модуль mod_rewrite работает однозначно, но вот как он работает... не понимаю...
.htaccess работает 100%, проверял.
похоже что все-таки что-то с настройкой мода, подскажите плиз где рыть...
причем похоже перестали работать и ранее работавшие строки:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^hттp://(www.)?xxx.msk.ru(/)?.*$ [NC]
RewriteRule .*\.(pdf|rar|zip)$ hттp://xxx.msk.ru/error.php [R,NC]
Спасибо всем большое заранее!
Passat19
Цитата:
cделай временно 9 уровень логирования и поймешь как он работает и что не так.
временно, иначе при большом количестве обращений съест место
Цитата:
т.е. модуль mod_rewrite работает однозначно, но вот как он работает... не понимаю..
cделай временно 9 уровень логирования и поймешь как он работает и что не так.
временно, иначе при большом количестве обращений съест место
Qwezar
Я бы хотел услышать ответ на попрос как поставить всё это в конец строки, а не то как обозвать переменную.
Я бы хотел услышать ответ на попрос как поставить всё это в конец строки, а не то как обозвать переменную.
kenny_sk8
в скрипте анализируешь $_SERVER['QUERY_STRING']
и вытаскиваешь нужные тебе значения
в скрипте анализируешь $_SERVER['QUERY_STRING']
и вытаскиваешь нужные тебе значения
А в конец с помощью регвыра эту фигню поставить вообще никак? да?
kenny_sk8
Цитата:
вот именно, что добавляешь в конец.. или вообще просто сразу после ?
и потом скриптом смотришь, что ему передали
Цитата:
А в конец с помощью регвыра эту фигню поставить вообще никак? да?
вот именно, что добавляешь в конец.. или вообще просто сразу после ?
и потом скриптом смотришь, что ему передали
Здравствуйте.
У меня такой вопрос:
Как заставить mod_rewrite применять правило для всех вхождений подстроки в строку а не только для одного.
Например:
RewriteRule ^(.*)test(.*)$ /$1TEST$2
Если запрос имеет вид lalalatestlalatest, то преобразование test в TEST выполнится всего один раз. В итоге получится строка lalalatestlalaTEST, вопрос, как сделать так, чтобы получилась lalalaTESTlalaTEST, без дублирования правила, т.к. вхождений искомой подстроки в строку может быть сколько угодно.
Спасибо.
И второй вопрос: где можно прочитать полное описание всех флагов mod_rewrite.
У меня такой вопрос:
Как заставить mod_rewrite применять правило для всех вхождений подстроки в строку а не только для одного.
Например:
RewriteRule ^(.*)test(.*)$ /$1TEST$2
Если запрос имеет вид lalalatestlalatest, то преобразование test в TEST выполнится всего один раз. В итоге получится строка lalalatestlalaTEST, вопрос, как сделать так, чтобы получилась lalalaTESTlalaTEST, без дублирования правила, т.к. вхождений искомой подстроки в строку может быть сколько угодно.
Спасибо.
И второй вопрос: где можно прочитать полное описание всех флагов mod_rewrite.
user472
Цитата:
а ссылки в шапке уже не устраивают?
Цитата:
к чему такой изврат?
пока ед на ум приходит.. сделать замену и послать снова на правила.. и так в цикле, пока не будет все заменено.
Цитата:
И второй вопрос: где можно прочитать полное описание всех флагов mod_rewrite.
а ссылки в шапке уже не устраивают?
Цитата:
В итоге получится строка lalalatestlalaTEST, вопрос, как сделать так, чтобы получилась lalalaTESTlalaTEST, без дублирования правила, т.к. вхождений искомой подстроки в строку может быть сколько угодно
к чему такой изврат?
пока ед на ум приходит.. сделать замену и послать снова на правила.. и так в цикле, пока не будет все заменено.
Люди добрые помогите пожалуйста с написанием правил для такого замены адреса.
http://server/?go=dwnlds
http://server/download/
http://server/?go=dwnlds&gr=1
http://server/download/program/
http://server?go=dwnlds&gr=1&sgr=1
http://server/download/program/internet
http://server/?go=viewfile&id=142
http://server/viewfile/142
http://server/getfile.php?id=142
http://server/getfile/142
Спасибо.
http://server/?go=dwnlds
http://server/download/
http://server/?go=dwnlds&gr=1
http://server/download/program/
http://server?go=dwnlds&gr=1&sgr=1
http://server/download/program/internet
http://server/?go=viewfile&id=142
http://server/viewfile/142
http://server/getfile.php?id=142
http://server/getfile/142
Спасибо.
Хочу, чтоб мой скрипт перехватывал управление только, если в ссылке НЕТ определенных слов: "_pre", "_mini" и "avatars". А так же, чтоб расширение файлов было только GIF, JPG или PNG.
Добился пока только для первых двух ("pre" и "mini"):
Код: <FilesMatch "[^mini|pre]\.(gif|jpg|png)$">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /files/my_script.php [L,QSA]
</FilesMatch>
Добился пока только для первых двух ("pre" и "mini"):
Код: <FilesMatch "[^mini|pre]\.(gif|jpg|png)$">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /files/my_script.php [L,QSA]
</FilesMatch>
Нужно решить следующую задачу:
При обращении к web-серверу из локальной сети (192.168.34.0/24): http://192.168.34.200/index.html (он же http://server/index.html) нужно чтобы апач редиректил на адрес http://192.168.34.200/site/index.html (он же http://server/site/index.html)
А при обращении с сервера к: http://127.0.0.1 (он же http://localhost) редирект не происходил.
Что написать в .htaccess ?
При обращении к web-серверу из локальной сети (192.168.34.0/24): http://192.168.34.200/index.html (он же http://server/index.html) нужно чтобы апач редиректил на адрес http://192.168.34.200/site/index.html (он же http://server/site/index.html)
А при обращении с сервера к: http://127.0.0.1 (он же http://localhost) редирект не происходил.
Что написать в .htaccess ?
Здравствуйте.
Помогите пожалуйста советом.
Хочу, чтобы адреса
http://site.ru/script/1 и http://site.ru/script/1/
заменялись на http://site.ru/script.php?p=1
Если использовать такую конструкцию
RewriteRule ^.*script/(.*)$ script.php?p=$1
то при использовании http://site.ru/script/1/ в скрипт передается 1/ вместо 1
А если юзать
RewriteRule ^.*script/(.*)/$ script.php?p=$1
то для http://site.ru/script/1 правило вообще не сработает.
Помогите пожалуйста советом.
Хочу, чтобы адреса
http://site.ru/script/1 и http://site.ru/script/1/
заменялись на http://site.ru/script.php?p=1
Если использовать такую конструкцию
RewriteRule ^.*script/(.*)$ script.php?p=$1
то при использовании http://site.ru/script/1/ в скрипт передается 1/ вместо 1
А если юзать
RewriteRule ^.*script/(.*)/$ script.php?p=$1
то для http://site.ru/script/1 правило вообще не сработает.
Цитата:
в скрипт передается 1/ вместо 1
и что? сложно выделить в нем?
RewriteRule ^.*script/(.*)/?$ script.php?p=$1
или
RewriteRule ^.*script/(.*)/+$ script.php?p=$1
не проверял какой сработает
Спасибо.
Еще одна проблема.
Например мы заменяем
script.php?p1=2&p2=4
на
script/2/4.html
При этом на одном уровне со скриптом script.php лежит папка с картинками (pict). И пути к картинкам прописаны, как pict/p1.jpg
Если мы заменяем URL на script/2/4.html, то картинки уже не грузятся, т.к. получается, что мы находимся как бы в каталоге 2 и скорее всего картинки он пытается брать оттуда.
Если например заменять на script2-4.html, т.е. как бы не добавлять новые каталоги в URL, то все ok.
Можно ли как то решить эту проблему с директориями?
Еще одна проблема.
Например мы заменяем
script.php?p1=2&p2=4
на
script/2/4.html
При этом на одном уровне со скриптом script.php лежит папка с картинками (pict). И пути к картинкам прописаны, как pict/p1.jpg
Если мы заменяем URL на script/2/4.html, то картинки уже не грузятся, т.к. получается, что мы находимся как бы в каталоге 2 и скорее всего картинки он пытается брать оттуда.
Если например заменять на script2-4.html, т.е. как бы не добавлять новые каталоги в URL, то все ok.
Можно ли как то решить эту проблему с директориями?
Sozon
Цитата:
читать, к примеру, про таг base
либо писать пути от корня сайта
либо в том же rewrite проверять расширение файла
Цитата:
Можно ли как то решить эту проблему с директориями?
читать, к примеру, про таг base
либо писать пути от корня сайта
либо в том же rewrite проверять расширение файла
люди, перерыл много чего, не могу найти как работать с датами
нужно при получении урла, сравнить его стекущей датой...
буду благодарен за любую помошь
навеяно (http://forum.ru-board.com/topic.cgi?forum=31&topic=11023&start=20#20)
нужно при получении урла, сравнить его стекущей датой...
буду благодарен за любую помошь
навеяно (http://forum.ru-board.com/topic.cgi?forum=31&topic=11023&start=20#20)
Mira
Цитата:
сравнить что???
Цитата:
нужно при получении урла, сравнить его стекущей датой...
сравнить что???
сравнить число, полученное из урла, с текущей датой... и в зависимости от решения сделать соответсвующие дейсвия.
Mira
Цитата:
давай не словами, а примерами, а?? и дату можно по разному записать..
но проще перекидывать скрипту и в нем смотреть
Цитата:
сравнить число, полученное из урла, с текущей датой... и в зависимости от решения сделать соответсвующие дейсвия.
давай не словами, а примерами, а?? и дату можно по разному записать..
но проще перекидывать скрипту и в нем смотреть
http://forum.ru-board.com/topic.cgi?forum=31&topic=11023&start=20#20 здесь изложено почему не проще делать через скрипт.
например урл такого виде http://site.ru/070317/img123.gif
правило
RewriteRule ^([0-9]{6})/img([0-9]+).gif?$ /.....
вот надо сравнить это в htaccess и в соответсвии с резульатом заргузить либо
imgempty.gif
или на скрипт
getimg.php?id=$2
Все.
Спасибо.
например урл такого виде http://site.ru/070317/img123.gif
правило
RewriteRule ^([0-9]{6})/img([0-9]+).gif?$ /.....
вот надо сравнить это в htaccess и в соответсвии с резульатом заргузить либо
imgempty.gif
или на скрипт
getimg.php?id=$2
Все.
Спасибо.
Mira
ну.. выцепляем дату из url и далее сравниваем с переменными окружения..
итого.. первый RewriteCond для вытаскивания даты
второй RewriteCond для сравнения ее с нынешней %{переменная}:
TIME_YEAR
TIME_MON
TIME_DAY
и далее RewriteRule для перехода по новой url
ну.. выцепляем дату из url и далее сравниваем с переменными окружения..
итого.. первый RewriteCond для вытаскивания даты
второй RewriteCond для сравнения ее с нынешней %{переменная}:
TIME_YEAR
TIME_MON
TIME_DAY
и далее RewriteRule для перехода по новой url
Cheery
Спасибо, а можно немножко подробней и с примерами.
Добавлено:
простите. не проштудировал вопрос а уже о несностях написал...
пока отбой.
Добавлено:
Цитата:
может кому-то поможет
Спасибо, а можно немножко подробней и с примерами.
Добавлено:
простите. не проштудировал вопрос а уже о несностях написал...
пока отбой.
Добавлено:
Цитата:
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html. Просто класная вещь для какой-либо странички…
может кому-то поможет
Здравствуйте.
У меня вопрос по mod_rewrite
хочу чтобы
вместо http://мой_сайт/articles/ открывалось http://мой_сайт/articles.php
вместо http://мой_сайт/articles/2/ открывалось http://мой_сайт/articles.php?r=2
вместо http://мой_сайт/articles/2/3.htm открывалось http://мой_сайт/articles.php?r=2&s=3
Все это у меня получилось. Приведу код, может куму - нибудь поможет:
RewriteRule ^.*articles/([0-9]*)/([0-9]*)\.htm articles.php?s=$2&r=$1
RewriteRule ^.*articles/([0-9]*)/ articles.php?r=$1
RewriteRule ^.*articles articles.php
Но теперь мне надо, чтобы со старых страниц был 301-й редирект на новые, чтобы не терять PR, т.е. чтобы
http://мой_сайт/articles.php редиректилась на http://мой_сайт/articles/
http://мой_сайт/articles.php?r=2 на http://мой_сайт/articles/2/
http://мой_сайт/articles.php?r=2&s=3 на http://мой_сайт/articles/2/3.htm
Подтолкните к правильному решению плиз.
У меня вопрос по mod_rewrite
хочу чтобы
вместо http://мой_сайт/articles/ открывалось http://мой_сайт/articles.php
вместо http://мой_сайт/articles/2/ открывалось http://мой_сайт/articles.php?r=2
вместо http://мой_сайт/articles/2/3.htm открывалось http://мой_сайт/articles.php?r=2&s=3
Все это у меня получилось. Приведу код, может куму - нибудь поможет:
RewriteRule ^.*articles/([0-9]*)/([0-9]*)\.htm articles.php?s=$2&r=$1
RewriteRule ^.*articles/([0-9]*)/ articles.php?r=$1
RewriteRule ^.*articles articles.php
Но теперь мне надо, чтобы со старых страниц был 301-й редирект на новые, чтобы не терять PR, т.е. чтобы
http://мой_сайт/articles.php редиректилась на http://мой_сайт/articles/
http://мой_сайт/articles.php?r=2 на http://мой_сайт/articles/2/
http://мой_сайт/articles.php?r=2&s=3 на http://мой_сайт/articles/2/3.htm
Подтолкните к правильному решению плиз.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445
Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.