[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сложный mor_rewrite
разум
Есть форма с <select name="f[]" multiple >
И соответственно скрипт, который все это обрабатывает.
Получается примерно следующее: http://mysite.com/script.php?f[]=1&f[]=2&f[]=3
Возможно ли это каким-либо образом с помощью mod_rewrite преобразовать к http://mysite.com/script/1/2/3/



Спустя 20 минут, 15 секунд (7.06.2009 - 07:10) twin написал(а):
Действительно - mor_rewrite biggrin.gif
Дело всё в том, что этот модуль преобразует урлы с точностью до наоборот. Он это делает на сервере при приеме, а в адресную строку урл пишет браузер. То есть сначала, в адрес, пишется то, что нужно увидеть в строке, а потом он преобразует в то, что нужно получить приемнику.
Допустим в данном случае это могло бы выглядеть примерно так:
<form acnion="http://mysite.com/script/1/2/3/" methot="get">, а сервер бы увидел
script.php?f[]=1&f[]=2&f[]=3
НО.
Методом GET нельзя просто так передать массив. А как я понял, именно эта цель и преследуется. Используй post, а в акшен пиши все, что взбредет в голову. Тогда можно этим модулем преобразовать в нужный адрес. Допустим тут это могло бы выглядеть так:
Код
RewriteEngine On
RewriteRule ^([0-9-]+)/([0-9-]+)/([0-9-]+)/$ script.php

Но это чистой воды декорация.

Спустя 32 минуты, 59 секунд (7.06.2009 - 07:43) разум написал(а):
Спасибо за ответ. Действительно опечатался smile.gif
Принцип работы mod_rewrite я знаю. Проблема именно в том, что запросов "f[]=" может быть огромное количество.
Обрисую ситуацию. Идет парсинг tracker.php torrentpier'а, после чего все засовывается в xml для вывода в рсс. Поэтому get запросы необходимы, для того, чтобы парсить именно нужный запрос (отдельные форумы\подфорумы). Можно и post, но придется каждый раз заходить на сайт, выбирать нужное и читать в браузере. А тут все работает в читалках.

Соответственно хотелось бы, чтобы запрос вида http://mysite.com/script/1/2/3/4/5/
преобразовывался в http://mysite.com/script.php?f[]=1&f[]=2&f[]=3&f[]=4&f[]=5

Спустя 1 час, 30 минут, 37 секунд (7.06.2009 - 09:14) twin написал(а):
Цитата
запросов "f[]=" может быть огромное количество.

Не может. На GET есть ограничение, в отличии от post, так что выше головы не прыгнешь. Ну а преобразовать
Цитата
запрос вида http://mysite.com/script/1/2/3/4/5/

в
Цитата
http://mysite.com/script.php?f[]=1&f[]=2&f[]=3&f[]=4&f[]=5

я уже написал как:
Код
RewriteRule ^script/([0-9-]+)/([0-9-]+)/([0-9-]+)$ index.php?f[]=$1&s[]=$2&d[]=$3 [L]


Спустя 39 минут, 57 секунд (7.06.2009 - 09:53) разум написал(а):
Не совсем понял, в чем именно ограничение:
Код
<?php

if(isset($_GET['f'])) {
if(!empty($_GET['f']))  {
 $arr = $_GET['f'];
 for ($z = 0; $z < count($arr); $z++)
{
 $query = $query."&f[]=".$arr[$z];
   
}
 echo $query;
}
}
?>

http://mysite.com/script.php?f[]=6&f[]=10&f[]=18&f[]=48
=> выведет &f[]=6&f[]=10&f[]=18&f[]=48
что в принципе и надо.
А хотелось бы чтобы работало http://mysite.com/script/6/10/18/48
Цитата
я уже написал как:

А если значений будет 10?

Спустя 2 часа, 27 минут, 17 секунд (7.06.2009 - 12:21) twin написал(а):
Ограничение по объёму передаваемой информации.
Цитата
А хотелось бы чтобы работало http://mysite.com/script/6/10/18/48
я ничего не понимяю. Или ты не понимаешь, чего хочешь... Ну я же написал реврайт, именно так он и работает. Вот сделай так:
PHP
<?php
print_r
($_GET);
?>
<a href="http://mysite.com/script/1/2/3">Тест</a>
и в штаксель-максель пропиши мою строчку. Сам увидишь...

Спустя 8 часов, 16 минут, 26 секунд (7.06.2009 - 20:37) FatCat написал(а):
http://phpforum.ru/txt/index.php/t18496.html
Страницу узнали?
Нет там никакого мод-реврайта, все сделано в txt/index.php:
PHP
$main_string $_SERVER['PHP_SELF'];

if ( ! 
strstr$main_string'/index.php/' ) )
{
        
$std->boink_it$ibforums->vars['board_url'].'/'.LOFI_NAME.'/index.php/' );
}

if ( 
strstr$main_string"/" ) )
{
        
$main_string str_replace"/"""strrchr$main_string"/" ) );
}

$main_string str_replace".html"""$main_string );

$action 'index';
$id    0;
$st    0;

//--------------------------------
// Pages?
//--------------------------------

if ( strstr$main_string"-" ) )
{
        list( 
$main$start ) = explode"-"$main_string );

        
$main_string $main;
        
$st          $start;
}

$st intval($st);

Спустя 18 часов, 31 минута, 47 секунд (8.06.2009 - 15:09) glock18 написал(а):
Действительно, с mod_rewrite запаришься устанешь переписывать правила для любого количества параметров. Как сделать это без дублирования я не знаю, но FatCat предложил простой действенный вариант: ты можешь обрабатывать любой урл прямо в php.

Передавай что угодно, в общем.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.