Поскольку параметры в URL-запросе могут иметь произвольный порядок, необходимо использовать либо одну RewriteCond
директиву для каждого проверяемого параметра, либо для каждой возможной перестановки.
Вот пример с директивой RewriteCond
для каждого параметра:
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=1(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/welcome? [L,R=301]
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=2(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/prices? [L,R=301]
Но, как вы видите, это может привести к путанице.
Так что лучшим подходом может быть использование RewriteMap
. Самым простым будет простой текстовый файл с ключом и значением парами:
1 welcome
2 prices
Чтобы определить вашу карту, напишите следующую директиву в конфигурации вашего сервера или виртуального хоста (эта директива недопустима в контексте для каждого каталога):
RewriteMap examplemap txt:/path/to/file/map.txt
Тогда вам просто нужно одно правило:
RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=([0-9]+)(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/%{examplemap:%2}? [L,R=301]