правило для mod_rewrite в Apache

oleg1331

помогите, пожалуйста. не могу разобраться, почему правило не работает.
Задача: преобразовать урлы вида a/b/c?name=var&name1#ggg в script.php?page=a/b/c&name=var&name1#ggg
Я попробовал так:
 
 RewriteRule ^([a-zA-Z0-9-]+)\?(.*)$  script.php?page=$1&$2    [L] 

Однако, оно на отрез отказывается работать, хотя регексп (например, в php) делает все правильно.

Trofimovyoa



[a-zA-Z0-9-]
прямые слэши в эту группу входят разве?

oleg1331

опечатался, не входят. скопировал не тот эксперимент. только со слэшом тоже не работает

uncle17

проще сделать

RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\?(.*)$ script.php?page=$1/$2/$3&$4 [L]
, не находишь?

oleg1331

неа :( Это я в примере привел 3 уровень вложенности. Если бы он был фиксирован - да, супер. А как для произвольного уровня вложенности?

uncle17


([a-zA-Z0-9-\/]+)

oleg1331

этот вариант работает не так, как нужно. Я даже не знаю, что там происходит, но у меня впечатление, что там правило применяется два раза. То есть он сначала получает то, что надо. А потом еще раз преобразовывает и получает полную билиберду. Короче так, как надо оно не работает

uncle17

а, ну да, точно

([[a-zA-Z0-9-]\/]+)

З.Ы. Я еще символ подчеркивания добавляю ;)

oleg1331

хм. регулярного выражения не понял.
RewriteRule ([[a-zA-Z0-9-]\/]+) runExecutable.php?page=$1   [L]

не работает

uncle17


#!/usr/bin/perl -w
my $a = "a/b/c/d/e/f?param=parameter#anchor";
$a =~ /^([a-zA-Z0-9-\/]+[a-zA-Z0-9-]+)\?param\=(.*)#.*$/i;
print $1.$2."\n"; #первая переменная
print $3; #вторая переменная

работает:

a/b/c/d/e/f
parameter

oleg1331

гы. я проверяю в пхп - там у меня все замечательно работает. а вот в апаче - нет. там походу кривой какой-то движок регулярных выражений стоит. или я что-то не понимаю в его философии (

uncle17

щас нас тут с тобой ссаными тряпками закидают и будут правы.
Ни хрена не соображаю...
RewriteCond "%{REQUEST_FILENAME}" !-f
проверяет наличие _файла_, на гет-запрос после имени ему пох

oleg1331

точно. я ступил... :o Спасибо :)
Оставить комментарий
Имя или ник:
Комментарий: