Ваш набор правил выглядит относительно корректно, но вам нужно немного изменить второй RewriteCond
, чтобы отразить вашу цель:
RewriteCond %{HTTP_METHOD} !^POST [OR]
Это позволит вам перенаправить, если тип запроса не POST, или , и запрашиваемый URI не / dontredirectme / , что фактически приводит к перенаправлению для всего, что не является запросом POST, к / dontredirectme / .
Кроме того, входные данные для RewriteRule
не будут иметь начальную косую черту, если вы определяете их в контексте для каждого каталога (в файле .htaccess или в разделе <Directory>
). Если вы определяете его непосредственно в <VirtualHost>
(для каждого сервера), то ввод будет иметь косую черту, поэтому ваше правило будет нормальным.
Что касается эффективности, правила, определенные в конфигурации сервера, имеют преимущество, заключающееся в том, что они анализируются только один раз. С другой стороны, файл .htaccess должен анализироваться для каждого запроса, процесс, который включает в себя дополнительные (хотя и небольшие) накладные расходы при чтении файла и компиляции регулярных выражений.
Если вы действительно хотите выжать из этого эффективность, вы можете внести следующие изменения:
RewriteCond %{HTTP_HOST} =www.example.com
RewriteCond %{HTTP_METHOD} !=POST [NC,OR]
RewriteCond %{REQUEST_URI} !^/dontredirectme/
RewriteRule ^ http://www.example.net%{REQUEST_URI} [R=301,L]
Я сомневаюсь, что разница действительно заметна во всех случаях, кроме самых крайних, но это убирает два регулярных выражения в пользу прямого сравнения текста. Кроме того, поскольку вы просто хотите перенаправить запрос на новый дословный хост, вы можете «упростить» регулярное выражение, включенное в RewriteRule
, и просто использовать %{REQUEST_URI}
непосредственно при замене.