Назад | Перейти на главную страницу

Mod_Rewrite - Справка по изменению строки запроса

Мне нужна помощь с правилом mod_rewrite.

Я настраиваю директора по именам, поддерживающего SEO, и столкнулся с некоторыми проблемами, на которые, я знаю, есть простой ответ, но я не могу заставить его работать, чтобы спасти свою жизнь.

Вот образец URL-адреса, который мы хотели бы опубликовать

http://www.foo.com/bar/ca/marina-del-ray/first-last.html

Внутренний URL-адрес должен выглядеть следующим образом
/ bar /? searchState = ca & searchCity = marina + del + ray & firstName = first & lastName = last

Как видите, для города мне нужно заменить "-" на "+".

Любая помощь будет очень полезна, я хотел бы иметь возможность сделать это правило достаточно динамичным, чтобы, если в названии города содержится 1 или 15 слов, оно все равно передавалось бы без необходимости создавать 15 отдельных правил для каждого разрешения.

Большое спасибо за любой вклад или решения.

Рискуя прозвучать как зарезанная пластинка (потому что я предлагал подобное решение Вот), это звучит как другая ситуация, в которой хорошо работает программная RewriteMap.

В вашей конфигурации Apache что-то вроде:

RewriteMap rewriter prog:/path/to/script
RewriteRule ^(.*) %{rewriter:$1} [L]

И в вашем скрипте что-то вроде:

#!/perl 

$| = 1; 

# /bar/ca/marina-del-ray/first-last.html
while (<STDIN>) { 
        my @parts = split /\//;
        my @name = split /-/, $parts[4];
        $name[1] =~ s/\.html$//;
        grep { s/-/+/g } @parts;

        print "/$parts[1]/?searchState=$parts[2]&searchCity=$parts[3]&",
                "firstName=$name[0]&lastName=$name[1]", "\n";
}

Это выполнит именно то преобразование URL, которое вы запросили. Пожалуйста, обратите внимание, что это всего лишь пример кода - реальное решение должно быть гораздо более надежным.