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

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

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

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

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

URL-адрес сервера должен выглядеть следующим образом
/ Бар /? SearchState= са &searchCity= марин + Del+ луч & ПгвЬЫат = первое и LastName= последний

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

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

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

1 ответ

Решение

С риском звучания как испорченной записи (потому что я предложил подобное решение здесь), это звучит как другая ситуация, в которой программный 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, которое вы запросили. Пожалуйста, обратите внимание, что это просто пример кода - реальное решение должно быть гораздо более надежным.

Другие вопросы по тегам