2012-04-18 4 views
2

Я прошел через каждый учебник по mod_rewrite, но я не могу понять это.Перепишите результаты поиска

Я хочу переписать поисковые запросы от www.domain.com/?s=query до www.domain.com/search/query. До сих пор мне удалось добиться этого с помощью этого правила:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(#[^?&\ ]*)?\?([^&\ ]*&)?s=([^&\ ]+)[^\ ]*\ HTTP/ 
RewriteRule ^$ http://www.domain.com/search/%3? [R=301,L] 

Проблема заключается в том, что некоторые запросы будут привести к тому, несколько страниц результатов поиска ведьму доступны через www.domain.com/?s=query&nggpage=n (где п превосходит 2).

В этом случае, я хочу переписать это и в конечном итоге с URL-адресами: www.domain.com/search/query/nggpage-n.

Не совсем уверен, как добиться этого. Я ищу помощь ребятам.

+0

ИМХО вы могли бы попытаться расколоть проблему, как обрабатывать 'nggpage' отдельно и в другом случае отдельно. – g13n

+0

Когда вы говорите, что хотите переписать 'www.domain.com/? S = query' на' www.domain.com/search/query', вы имеете в виду, если кто-то напечатает первый, который вы хотите, чтобы окно браузера перенаправлялось на второй, или вы хотите, чтобы люди вводили второй, и он должен быть переписан первым? – baynezy

+0

Когда кто-то набирает www.domain.com/?s=query, он перенаправляется на сайт www.domain.com/search/query, который имеет тот же контент. Данное правило уже сделало трюк, но когда дело доходит до обработки второй переменной (nggpage), это сложная часть. И да @ g13n Я уже пробовал, но безуспешно. – Ace

ответ

2

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

  1. Проверьте поиск пары существует, перепишут в целевом пути и установить в env флаге для последующих испытаний

    RewriteCond %{QUERY_STRING} s=([^&\ ]+) 
    RewriteRule ^/?$ /search/%1 [E=redirect:true] 
    
  2. Если перенаправление устанавливаются и пагинация пары найдены, добавьте путь к пагинации

  3. Удалить пагинации для страницы 1

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)/nggpage-1$ /$1 
    
  4. Если перенаправление установлено, давайте перенаправлять

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L] 
    
Смежные вопросы