Перенаправить и переписать с помощью mod_rewrite - PullRequest
1 голос
/ 29 марта 2011

Задав этот вопрос: Очистить URL-адреса для поискового запроса? Я пробовал что-то с mod_rewrite:

RewriteCond %{QUERY_STRING} ^s=([a-z]+)$ [NC]
RewriteRule / /s/$1? [NC,R=301,L]

RewriteRule ^s/([a-z]+)$ /?s=$1 [NC,L]

Какова цель?

  1. Перенаправление http://example.com/?s=query на http://example.com/s/query
  2. Переписать http://example.com/s/query до http://example.com/?s=query

Это похоже на двойную работу, но если вы внимательно посмотрите, то увидите, что я пытаюсь выполнить:

  1. Перенаправить любую строку поискового запроса в более чистый эквивалент (будь то форма или кто-то, введя ее напрямую)
  2. Переписать (не перенаправить) этот URL обратно в динамическую строку запроса, чтобы я мог получить его с помощью PHP через $ _GET

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

Номер 2 работает, но это все.

1 Ответ

2 голосов
/ 29 марта 2011

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

Примечание: для подходящей группы из RewriteCond вы должны использовать %1, а не $1.

RewriteCond %{QUERY_STRING} ^s=([a-z]+)$ [NC]        
RewriteRule ^$ /s/%1? [NC,R,L]                     

RewriteRule ^s/([a-z]+)$ /?s=$1 [NC,L] 

Редактировать для отладки (см. Комментарии):

Мой тест:

| /
| --> doc
|   |
|   --> doc.php (takes doc as GET parameter)
|     | index.php

Мой апач переписал

RewriteCond %{QUERY_STRING} ^doc=([a-z]+)$ [NC]
RewriteRule ^$ /doc/%1? [NC,R,L]

RewriteRule ^doc/([a-z]+)$ /doc/doc.php?doc=$1 [NC,L]

Затем запрос на domain.com/?doc=query отображает doc is query

У меня работает.

...