[apache] как настроить пересылку запроса
Чем тебя mod_rewrite не устраивает?
может быть и устраивает
только я не знаю где чего и как писать
что можно почтать по сабжу? не слишком сложное - так, для ознакомления.
только я не знаю где чего и как писать http://www.test.graflekx.ru/pagestop-2-page-1.html
Вот, для начала. Сейчас поищу апачевские how-to's по mod_rewrite, там куча наглядных примеров.
Вот, для начала. Сейчас поищу апачевские how-to's по mod_rewrite, там куча наглядных примеров.
http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
Вот practical solutions, там почти наверняка есть то, что тебе надо.
Вот practical solutions, там почти наверняка есть то, что тебе надо.
А вообще, по идее, такая конструкция должна помочь
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?lnk=$1 [L,QSA]
</IfModule>
спасибо. Читаю, разбираюсь
Интересно, блин... Знал, что такое возможно, вот теперь и сам буду уметь 
Интересно, блин... Знал, что такое возможно, вот теперь и сам буду уметь по примеру кода: если убрать строку
RewriteCond %{REQUEST_FILENAME} !-f
то все работает. Эта строка ведь поидее должна запрещать прямой доступ к файлу? Или как?.. Почему из-за нее не работает?
RewriteCond %{REQUEST_FILENAME} !-f
то все работает. Эта строка ведь поидее должна запрещать прямой доступ к файлу? Или как?.. Почему из-за нее не работает?
а если шаблон изменения адреса исправить так:
RewriteRule ^(.*)?(.*)$ index.php?lnk=$1&$2 [L,QSA]
то он и параметры для пхп будет правильно обрабатывать. вроде бы.. так ведь?
RewriteRule ^(.*)?(.*)$ index.php?lnk=$1&$2 [L,QSA]
то он и параметры для пхп будет правильно обрабатывать. вроде бы.. так ведь?
а если шаблон изменения адреса исправить так:По идее, да. Только ? - спецсимвол, его надо экранировать.
RewriteRule ^(.*)?(.*)$ index.php?lnk=$1&$2 [L,QSA]
то он и параметры для пхп будет правильно обрабатывать. вроде бы.. так ведь?
RewriteRule ^(.*)\?(.*)$ index.php?lnk=$1&$2 [L,QSA]
однако тогда странно получается.
ссылка: http://test2.ru/hhh.html?
на RewriteRule ^(.*)\.html?$ index.php?lnk=$1 [L,QSA] работает, а на RewriteRule ^(.*)\.html\?$ index.php?lnk=$1 [L,QSA] не хочет..
вообще пытаюсь заставить шаблон работать только для определенных файлов типа .htm .html .php
ссылка: http://test2.ru/hhh.html?
на RewriteRule ^(.*)\.html?$ index.php?lnk=$1 [L,QSA] работает, а на RewriteRule ^(.*)\.html\?$ index.php?lnk=$1 [L,QSA] не хочет..
вообще пытаюсь заставить шаблон работать только для определенных файлов типа .htm .html .php
Зачем передавать путь запроса как параметр?
Он и так будет известен в скрипте, см. глобальный массив $_SERVER
Он и так будет известен в скрипте, см. глобальный массив $_SERVER
Зачем передавать путь запроса как параметр?Это второй вопрос, я его намеренно не ставил. Иначе топикстартеру никогда бы не довелось ближе познакомиться с mod_rewrite, а это очень полезно.
Но сегодня надеюсь домучать его хоть до какой-нибудь степени.И потом. Мучиться мне с ним все равно придется, т.к. мне же не все нужно перенаправлять на мой index.php. Так что сижу читаю маны...
Но то что не нужно возиться с параметрами - это уже гуд. Ссылку можно брать из REDIRECT_URL, а параметры и так все передадутся. так ведь?

однако тогда странно получается.Гм. Странно, должен сработать и второй вариант. Разницу между первым и вторым ты понимаешь, я думаю?
ссылка: http://test2.ru/hhh.html?
на RewriteRule ^(.*)\.html?$ index.php?lnk=$1 [L,QSA] работает, а на RewriteRule ^(.*)\.html\?$ index.php?lnk=$1 [L,QSA] не хочет..
вообще пытаюсь заставить шаблон работать только для определенных файлов типа .htm .html .php
Я по своему опыту скажу, что лучше день (два, три, месяц) позаниматься сексом с мод_рерайтом, а потом его нормально понимать, чем сейчас бросить и потом спрашивать простые вещи в форумах. Это "чёртово вуду" (характеристика дана участником проекта Apache и мало кто в нём нормально разбирается - в своё время на флокал мне на простой (как выяснилось позже) вопрос ответа не дали.
Ссылку можно брать из REDIRECT_URL, а параметры и так все передадутся. так ведь?О какой ссылке речь?
теоретически - да.
а еще я теоретически понимаю, почему (html)|(htm)|(php) не работает. только вот как это заставить работать...
а еще я теоретически понимаю, почему (html)|(htm)|(php) не работает. только вот как это заставить работать...
с которой мы пришли. т.е. если приходим с http://site.ru//hhhdd.html?param=123¶m2=456
то [REDIRECT_URL] => /hhhdd.html
то [REDIRECT_URL] => /hhhdd.html
теоретически - да.Погоди. У тебя ключевая разница в первом и втором варианте в том, что первый допускает наличие или отсутствие после .html любого символа. А второй строго требует именно наличия символа ?.
а еще я теоретически понимаю, почему (html)|(htm)|(php) не работает. только вот как это заставить работать...
Приведи своё правило с ветвлением по скобкам, посмотрим. И чётко, чётко опиши - чего ты хочешь добиться, а то я уже начал путаться =)
с которой мы пришли. т.е. если приходим с http://site.ru//hhhdd.html?param=123¶m2=456Ага.
то [REDIRECT_URL] => /hhhdd.html
со скобками уже разобрался. Мне хотелось, чтобы на index.php перенаправлялись только страницы .html .htm .php так что регэксп выглядит сейчас примерно так:
Вот. А теперь я хочу добиться того, чтобы все остальные запросы (к картинкам, js скриптам и т.п. просто перенаправлялись в другую аудиторию. Вот сижу шаманю. Вот это
почему-то не работает. хотя в оф. документации сказано, что вот это:
должно работать.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.(html|htm|php\?(.*?$ index.php [L]Вот. А теперь я хочу добиться того, чтобы все остальные запросы (к картинкам, js скриптам и т.п. просто перенаправлялись в другую аудиторию. Вот сижу шаманю. Вот это
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*) /modules/$1 [L]почему-то не работает. хотя в оф. документации сказано, что вот это:
for request ``GET /somepath/pathinfo'':
^/somepath(.*) /otherpath$1 /otherpath/pathinfo
должно работать.
со скобками уже разобрался. Мне хотелось, чтобы на index.php перенаправлялись только страницы .html .htm .php так что регэксп выглядит сейчас примерно так:Само условие правильно.
Вот дальше вопрос - ты перенаправил на index.php, но никакие параметры ему не передал. Зачем тогда было выделять $1 и $2 из запроса?
хм. действительно. Тогда делаем так:
а что на счет того, чтобы все остальное перенаправлять в /modules/$1 почему не хочет работать?
^.*\.html|htm|php(\?(.*?$
а что на счет того, чтобы все остальное перенаправлять в /modules/$1 почему не хочет работать?
а что на счет того, чтобы все остальное перенаправлять в /modules/$1 почему не хочет работать?А ты точно задал параметры после '?' ?
Не убирай скобки подвыражений, читаемость теряется.
Такое правило должно сработать, имхо.
RewriteRule ^(.*)\.(html|htm|php\?(.*?$ /modules/$3 [L, QSA]
не! не то.. имеется в виду вот что:
все файлы .html .htm .php перенаправлять на /index.php. С этим я вроде бы справился.
А для всех остальных добавлять в начало еще одну директорию. Т.е., предположим, запрос /123.txt нужно преобразовывать в /modules/123.txt
все файлы .html .htm .php перенаправлять на /index.php. С этим я вроде бы справился.
А для всех остальных добавлять в начало еще одну директорию. Т.е., предположим, запрос /123.txt нужно преобразовывать в /modules/123.txt
А для всех остальных добавлять в начало еще одну директорию. Т.е., предположим, запрос /123.txt нужно преобразовывать в /modules/123.txtНу, добавь ещё один RewriteRule ниже, их может быть столько, сколько нужно.
дык добавлять то добавляю.. только вот не работает
Опять похоже что-то перемудрил с регулярками :
Опять похоже что-то перемудрил с регулярками :
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*) /modules/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-dВот так попробуй.
RewriteRule ^(.*)$ /modules/$1 [L]
нифига. ругается на регэксп (выдает 500 ошибку)
up. Я уже в ступоре.. никак не получается написать нужный шаблон 

Оставить комментарий
oleg1331
возможна ли настройка apache для конкретного (одного) сайта так, чтобы все запросы к файлам .php .htm .html и т.д. вида http://mysite.ru/a/b/c.htm перенаправлялись на http://mysite.ru/index.php&lnk="a/b/c/.htm"...параметр lnk, естесственно, без кавычек и все нехорошие символы экранированы. Ну то беж чтобы php в php запрашиваемы относительный адрес передавался в качестве параметра lnk