2015-12-27 3 views
1

Я понимаю, что с помощью переписывания в апаче, если я хочу, чтобы соответствовать строке запроса, то я должен использоватьApache переписано - строка соответствия запроса

RewriteCond %{QUERY_STRING} 

Что хорошо, однако, у меня есть CSV-файл с около 2000 адресов в переписать, много содержат строки случайных запросов. Это будет кропотливый процесс, чтобы пройти через каждый и создать правило.

Есть ли общий способ перезаписи взглянуть на весь URL-адрес, включая строку запроса и перенаправить его?

+0

Не переписывайте на уровне http-сервера, но переместите его на некоторый язык сценариев, для exa mple php. Затем вы можете просто преобразовать CSV-данные в массив словарей и переписать запросы, используя функцию 'header()'. Выходит точно так же, но у вас гораздо больше гибкости и гораздо более удобный язык. – arkascha

+0

Не было бы проблем с производительностью, загрузки csv, соответствия и т. Д. При каждом запросе на 2000 переписывать правила? –

+0

Как было сказано выше: вы конвертируете CSV в массив словарей, действительно, вы делаете это _once_. После этого это статический код. Очевидно, что вы не хотите снова анализировать файл для каждого запроса. – arkascha

ответ

0

попробовать rewritemap

пример конфигурации для vurtual хоста

RewriteEngine on 
RewriteMap mymap "txt:/path/to/map.txt" 
RewriteCond %{QUERY_STRING} ^(.+)$ 
RewriteCond ${mymap:%1} >"" 
RewriteRule ^(.*)$ ${mymap:%1} [L] 

и map.txt например

p=1&i=1 /test.php?n=2 
p=1&i=2 /test.php?n=4 
p=1&i=3 /test.php?n=6 
... 

Предположим, что он подходит для сайта, без Hign нагрузки :)

Смежные вопросы