Подскажите как с помощью RewriteEngine подменить запрос пользователя.Запрос выглядит так: http://мой_сайт/main.php
Надо подменить на: http://мой_сайт/index.php?go=mainОсновываясь на примерах пробовал сделать следующее:
RewriteEngine on
RewriteBase /
RewriteRule ^index.php?go=main$ main.php [R]Никакого эфекта. Наверное чего-то недопонял.
Помогите пожалуйста решить задачу.
Только наоборот:RewriteRule main.php ^index.php?go=main$ [R]
>Только наоборот:
>
>RewriteRule main.php ^index.php?go=main$ [R]
>Спасибо, попробую позже, а пока решил задачу так:
Redirect permanent /main.php http://мой_сайт/index.php?go=main
Это внешний редирект. Только тебе он здесь не нужен, и лучше использовать локальный, если такая возможность есть.А по сути - RTFM. http://httpd.apache.org/
hello all
... вот по поводу внутреннего редиректа :- моя задача : передать значение 'request' из http://myhost/request в среду php-переменных и открыть оперирующий ими файл.
-делаю так : RewriteRule ^/(.*) /alias/index.php?$1
по идее это должно работать (получаю QUERY_STRING и работаю дальше с ней на уровне php), но возникает проблема когда mod_rewrite
начинает перенаправлять такие вещи как style.css , picture.gif , etc...(файлы привязанные к index.php - элементы дизайна и декорации)
то есть выходит так : $1=style.css , $1=picture.gif , ...
в итоге разумеется ничего не работает как надо
подскажите плз как быть в такой ситуации
>-делаю так : RewriteRule ^/(.*) /alias/index.php?$1ну так указывай точнее, что ты хочешь переписать:
RewriteRule ^/(.*).html$ /alias/index.php?$1.html
не - дело в том что мне нужно изъять всё что нахотиться после
http://myhost/ и загнать в переменную...такой вариант : RewriteRule ^/(.*).html$ /alias/index.php?$1.html
не подходит так как QUERY_STRING может и не содержать '.html'
(она вообще произвольная - поэтому и '(.*)') - то есть если идёт запрос :
http://myhost/kill_tha_chiken (не содержит '.html'=> pass through...)мне бы хотелось при этом (при любом запросе!!!)подключать файл(фильтр-сортировщик переменных), который в начале работает с $_SERVER['QUERY_STRING'] == 'kill_tha_chiken' и далле выводит контент в зависимости от привязки оной.
>мне бы хотелось при этом (при любом запросе!!!)подключать файл(фильтр-сортировщик переменных), который в
>начале работает с $_SERVER['QUERY_STRING'] == 'kill_tha_chiken' и далле выводит контент в
>зависимости от привязки оной.Ну так у тебя так и получилось в самом начале :)
Кто ж мешает обрабатывать запросы на style.css?
Ты сформулируй сначала, какие запросы ты хочешь переписывать, а какие нет.
Например: переписывать все, кроме /files/*.gif и /files/*.css. Тогда и пиши соотв. условие.
:-) итак - попытаюсь подробнее обрисовать ситуацию(сорри если повторюсь) :хотелось бы сделать так - чтобы мой сервер прежде чем выдавать что-либо (любой URI) пропускал запрос через index.php
(ну типа index.php?id=ident&op=determ&...&last=etc), но чтобы не было возможности зайти на реальную страничку в обход этого index.php - то есть:
http://myhost/files/news/shutdown.html (если она есть - она откроется), и чтобы всё это дело имело товарный вид (ЧПУ).поэтому ,я думаю, надо все запросы отлавливать и работать с ними на уровне переменных(чистить их и распределять как пожелается) , следовательно вариант RewriteRule ^/(.*) /alias/index.php?$1 кажется самым удачным, но
если делать так то под это правило попадает (обрабатывается) не только строка из браузера (когда я это понял - был неприятно удивлён :-) ), но и все пути (внутреннии привязки) : style.css -> index.php?id=style.css...можно конечно ограничить применение правила через RewriteCond :
RewriteCond %{REQUEST_URI} !\.(.*)$ (я все предпочитаю в общем случае:-) )- пропускать все запросы имеющие на конце файловое расширение (это срабатывает) -но меня не устраивает то -что
тогда ничего не помешает этому иметь место http://myhost/news/shutdown.htmи ешё - запрос вида /abrakadabra/news будет менять все пути файлов привязок - style.css -> - /abrakadabra/style.css (они уже не обрабатываются через index.php - но и не работают) - вот ...
мб посоветуете как сделать такую штуку... если напишите скриптик буду очень рад (я парюсь с этим уже 3-ий день - статей не так уж много на ету тему - а без разрешения этой проблемы работа дальше не двигается)
1. Можно условие RewriteCond написать обратное, перечислив типы, которые не обрабатываются.
2. Можно этим скриптом тупо выдавать содержимое необрабатываемых файлов.
3. Можно устнаовить output фильтр (по типу SSI) на нужные mimetypes.
>1. Можно условие RewriteCond написать обратное, перечислив типы, которые не обрабатываются.
>2. Можно этим скриптом тупо выдавать содержимое необрабатываемых файлов.
>3. Можно устнаовить output фильтр (по типу SSI) на нужные mimetypes.
1. Думаю что нельзя - так как мне для обработки требуется та строка , которая придёт GETом из браузера (а ето всё что угодно - и всё должно быть обработано должным образом) - поэтому необрабатываемых типов быть не должно . Вроде логично. В идеале хотелось бы как-нибудь заграничить первоначальный запрос (URI) и те URI , которые приходят не с клиентской стороны ...что бы пропустить второе.(но проблема с подстановкой путей вида : abrakadabra/foo/stuff к внутренним связям ,скорее, только этим не решится)2. Вот это точно неприемлимо
3. А здесь уже ближе к истине ...если можно - то конкретизируйте этот вариант... я веб-программист только начинающий и хотелось бы сразу убедиться в состоятельности/несостоятельности этого варианта
в php есть очень удобная штука : auto_prepend_file... но увы такие файлы(на сколько мне изветно)инклюдятся только к php-файлам - а метить все файлы как php очевидно не рационально...прошу прощения за свои пробелы в познании предмета (которые мб тут очень заметны) но увы всему и сразу научиться нельзя - вот и прошу помощи аудитории :)
>>1. Можно условие RewriteCond написать обратное, перечислив типы, которые не обрабатываются.
>>2. Можно этим скриптом тупо выдавать содержимое необрабатываемых файлов.
>>3. Можно устнаовить output фильтр (по типу SSI) на нужные mimetypes.
>
>
>1. Думаю что нельзя - так как мне для обработки требуется та
>строка , которая придёт GETом из браузера (а ето всё что
>угодно - и всё должно быть обработано должным образом) - поэтому
>необрабатываемых типов быть не должно . Вроде логично. В идеале хотелось
>бы как-нибудь заграничить первоначальный запрос (URI) и те URI , которые
>приходят не с клиентской стороны ...что бы пропустить второе.(но проблема с
>подстановкой путей вида : abrakadabra/foo/stuff к внутренним связям ,скорее, только этим
>не решится)
>
>2. Вот это точно неприемлимо
>
>3. А здесь уже ближе к истине ...если можно - то конкретизируйте
>этот вариант... я веб-программист только начинающий и хотелось бы сразу убедиться
>в состоятельности/несостоятельности этого варианта
>в php есть очень удобная штука : auto_prepend_file... но увы такие файлы(на
>сколько мне изветно)инклюдятся только к php-файлам - а метить все файлы
>как php очевидно не рационально...
>
>прошу прощения за свои пробелы в познании предмета (которые мб тут очень
>заметны) но увы всему и сразу научиться нельзя - вот и
>прошу помощи аудитории :)http://httpd.apache.org/
AddOutputFilter
ExtFilterDefine
>http://httpd.apache.org/
>AddOutputFilter
>ExtFilterDefineспасибо - но оказалось - это немного не то что мне нужно : во-первых апач.2 не хочу пока ставить ,а во-вторых ... и во-вторых что-то было - не помню что именно :) так как всё-таки стал делать через mod_rewrite...
и вот значит вышло так :
<base href="http://my_host/">
+
httpd.conf:
RewriteCond %{REQUEST_URI} !\.(swf)|(jpg)|(png)|(gif)|(pcx)|(css)$
RewriteRule ^/(.*)$ /alias/index.php?$1 [PT]так всё работает... но как достигнуть подобного эффекта не основываясь на корректировке запроса посредством html-кода? (то есть можно ли сделать , что бы похоже работало без '<base href="http://my_host/">' ?) - RewriteBase / должена вроде как всё исправлять - но она не работает в httpd.conf - хотелось бы всем из него заведывать :)
>1. Думаю что нельзя - так как мне для обработки требуется та
>строка , которая придёт GETом из браузера (а ето всё что
>угодно - и всё должно быть обработано должным образом) - поэтому
>необрабатываемых типов быть не должно . Вроде логично. В идеале хотелось
>бы как-нибудь заграничить первоначальный запрос (URI) и те URI , которые
>приходят не с клиентской стороны ...что бы пропустить второе.Проблема ваша в том, что _абсолютно все_ запросы приходят с клиентской стороны. Для сервера нет никаких "внутренних связей".
Браузер -- по просьбе юзера -- запрашивает файл (допустим, .html), получает его и начинает отображать. Когда в ходе отображения встречаются теги link, img, frame и им подобные, браузер -- по собственной инициативе -- посылает новый запрос. Как инициирован тот или иной get, установить невозможно.
>
>Проблема ваша в том, что _абсолютно все_ запросы приходят с клиентской стороны.
>Для сервера нет никаких "внутренних связей".
>Браузер -- по просьбе юзера -- запрашивает файл (допустим, .html), получает его
>и начинает отображать. Когда в ходе отображения встречаются теги link, img,
>frame и им подобные, браузер -- по собственной инициативе -- посылает
>новый запрос. Как инициирован тот или иной get, установить невозможно.да - точно :( спасибо что прояснил - как же тогда мне решить эту задачу?
.css ,да и все файлы текстового содержания, можно инклюдить - но как быть с картинками например?я говорил что сделал :
RewriteCond %{REQUEST_URI} !\.(swf)|(jpg)|(png)|(gif)|(pcx)|(css)$
RewriteRule ^/(.*)$ /alias/index.php?$1 [PT]но вот такой запрос : http://my_host/http://hacker_host/cheat_gif.gif (такое вообше возможно ?)
не пройдёт обработку файлом index.php со свеми последствиями...:(как вообще решаются такого рода задачи (мб технологию надо ещё какую-нить использовать или ешё что...)?
если коротко :
есть ли аналог RewriteBase / для httpd.conf?