Правила для mod_rewrite - требуется

Пуховой
На сайте с 17.11.2007
Offline
154
811

Задача такова. На сервере имеется файл:

index[too]php[vop]param[rav]10[and]param[rav]20

Нужно сделать так, чтобы при запросе вида:

index.php?param1=10&param2=20

выдавался этот файл.

Заранее спасибо за ответы.

[umka]
На сайте с 25.05.2008
Offline
456
#1

RewriteEngine On
RewriteCond %{QUERY_STRING} ^param1=([0-9]+)&param2=([0-9]+)$
RewriteRule ^index.php$ index[too]php[vop]param[rav]%1[and]param[rav]%2 [L]

:) ?

Лог в помощь!
Пуховой
На сайте с 17.11.2007
Offline
154
#2

Посоветовался со знакомым веб-программистом. Из того, что он насоветовал, получилось:

- .htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ rewriterule.php

- .rewriterule.php

<?php

echo (readfile ($_SERVER['DOCUMENT_ROOT'].str_replace ("?", "[vop]", str_replace (".", "[too]", str_replace ("&", "[and]", str_replace ("=", "[rav]", $_SERVER['REQUEST_URI']))))));
?>

Подобная схема работает только если знак вопроса первым в запросе не стоит.

Делаем запрос http://domain.com/booo.php?param=1 - все работает, выдает файл booo[too]param[rav]1.

Делаем запрос http://domain.com/?param=1 - отправляет в корень домена на индексную страницу.

Нужно поправить так, чтобы запросы скрипту передавались только в том случае, если в них присутствует "?".

Пуховой добавил 14.08.2010 в 17:02

Актуально.

[umka]
На сайте с 25.05.2008
Offline
456
#3

Без имени файла — это частный случай, его нужно обрабатывать отдельно.

Вообще, вы задачу поточней опишите, потому что условиям, указанным в вашем первом посте, соответствует моё решение :)

Выделите, что именно может изменяться в запросе, и куда это подставлять (с несколькими примерами).

Наверняка всё можно сделать лишь силами mod_rewrite.

Пуховой
На сайте с 17.11.2007
Offline
154
#4

Запрос: http://www.domain.com/

Должно отдать содержимое файла: http://www.domain.com/index.html (или php)

Запрос: http://www.domain.com/?boo=1

Должно отдать содержимое файла: http://www.domain.com/[vop]boo[rav]1

Запрос: http://www.domain.com/page?puhovoi=3

Должно отдать содержимое файла: http://www.domain.com/page[vop]puhovoi[rav]3

Запрос: http://www.domain.com/iphone/iphone.asp?model=3&big=43

Должно отдать содержимое файла: http://www.domain.com/iphone/iphone[too]asp[vop]model[rav]3[and]big[rav]43

Я у сервера прошу некий файл. Сервер смотрит адрес запроса, делает замену:

? -> [vop]

& -> [and]

. -> [too]

= -> [rav]

... и отдает нужный файл.

Причем запрос может быть абсолютно любым - с директориями, с отсутствием некоторых параметров или наоборот - с излишним присутствием.

[umka]
На сайте с 25.05.2008
Offline
456
#5

Тогда в .htaccess так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . rewriterule.php
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ rewriterule.php

В rewriterule.php так:

<?
$search=array('?','&','.','=');
$replace=array('[vop]','[and]','[too]','[rav]');
// ... и не забываем ещё отдать тут нужный content-type
readfile($_SERVER['DOCUMENT_ROOT'].str_replace($search,$replace,$_SERVER['REQUEST_URI']));
?>

Зачем вам такая коряга, спрашивать даже не буду :D

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий