mod_rewrite это - несколько условий или я могу просто передать все переменные вместе? - PullRequest
1 голос
/ 30 декабря 2011

Из-за настройки обратного прокси мне нужно передать дополнительный запрос var, который прокси не может использовать mod_rewrite. Прокси находится в / search, однако я использую / find на всех страницах как mod_rewrite для / search для передачи запроса var s = gsacollection.

См. Пример:

# Direct link to search which passes collection var
# eg http://www.domain.com/find
RewriteRule ^find$ /search?s=gsacollection [NC]

#Rewrite all query vars
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^find(.*)$ /search?%1 [NC,L] 

Я пытаюсь захватить несколько переменных для mod_rewrite, которые отправляются. Проблема в том, что я не всегда знаю, какие из них отправляются. Это попытка общего захвата их. Предложения?

Я хочу передать все строки запроса после / find? к / поиск?

Например, вот несколько примеров URI:

find?q=test&sort=date:D:L:d1&num=10&s=gsacollection&l=en&start=10

find?q=tfsa&sort=date:D:L:d1&num=10&s=gsacollection&l=en&filter=0

find?q=tfsa&filter=0&num=10&s=gsacollection&l=en&sort=date%3AD%3AS%3Ad1

Если общий захват не сработает, мне придется взглянуть на настройку нескольких правил RewriteCond, интересно, есть ли способ объединить их так, чтобы я мог передавать переменные из каждого условия в построить правило перезаписи (например, группа)?

# Grab everything after /find and replace with /search if these query vars exist
RewriteCond %{QUERY_STRING} q=(.*) [AND]
RewriteCond %{QUERY_STRING} s=(.*)
RewriteRule ^find(.*)$ /search$1 

1 Ответ

1 голос
/ 31 декабря 2011

Попробуйте использовать этот код в файле .htaccess в $ DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteOptions MaxRedirects=10

RewriteRule ^find/?$ search?s=gsacollection [QSA,L,NC]

Убедитесь, что у вас нет других конфликтующих правил mod_rewrite здесь.Флаг QSA обязательно добавит все параметры запроса для объединения с параметром s=gsacollection.

...