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