[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
то все работает. Эта строка ведь поидее должна запрещать прямой доступ к файлу? Или как?.. Почему из-за нее не работает?
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
Он и так будет известен в скрипте, см. глобальный массив $_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
Ссылку можно брать из REDIRECT_URL, а параметры и так все передадутся. так ведь?О какой ссылке речь?
а еще я теоретически понимаю, почему (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
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 из запроса?
^.*\.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
А для всех остальных добавлять в начало еще одну директорию. Т.е., предположим, запрос /123.txt нужно преобразовывать в /modules/123.txtНу, добавь ещё один RewriteRule ниже, их может быть столько, сколько нужно.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*) /modules/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-dВот так попробуй.
RewriteRule ^(.*)$ /modules/$1 [L]
нифига. ругается на регэксп (выдает 500 ошибку)

Оставить комментарий
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