Назад | Перейти на главную страницу

Apache: как перенаправить запрос OPTIONS с помощью .htaccess?

У меня есть сервер Apache 2.2.4 с множеством таких сообщений в access_log:

::1 - - [15/May/2010:19:55:01 +0200] "OPTIONS * HTTP/1.0" 400 543
::1 - - [15/May/2010:20:22:17 +0200] "OPTIONS * HTTP/1.0" 400 543
::1 - - [15/May/2010:20:24:58 +0200] "OPTIONS * HTTP/1.0" 400 543
::1 - - [15/May/2010:20:25:55 +0200] "OPTIONS * HTTP/1.0" 400 543
::1 - - [15/May/2010:20:27:14 +0200] "OPTIONS * HTTP/1.0" 400 543

Это «внутренние фиктивные соединения», как описано на этой странице:

http://wiki.apache.org/httpd/InternalDummyConnection

Эта страница также затрагивает мою основную проблему: «В версии 2.2.6 и ранее в определенных конфигурациях эти запросы могут попадать на динамическую веб-страницу с тяжелым весом и вызывать ненужную нагрузку на сервер. Вы можете избежать этого, используя mod_rewrite для ответа перенаправлением при доступе с этого конкретного User-Agent или IP-адреса."

Ну, очевидно, я не могу использовать UserAgent, потому что я минимизировал подпись сервера, но я мог бы использовать IP-адрес. Однако я не имею ни малейшего понятия, что RewriteCond и RewriteRule должны искать для IPv6-адреса :: 1.

Веб-сайт, на котором это работает, использует CodeIgniter, поэтому уже есть следующий .htaccess, мне просто нужно добавить к нему:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ /index.php?/$1 [G]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Есть идеи, как написать это правило .htaccess?

Решено: Добавление еще одного правила приводит к тому, что ОПЦИИ не соответствуют текущим правилам и обрабатываются так же, как Apache по умолчанию.

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ /index.php?/$1 [G]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REMOTE_HOST} !^::1$
RewriteRule ^(.*)$ /index.php?/$1 [L]

Я никогда не захожу на сайт через localhost по IPv6, так что это отлично работает.

RewriteCond %{REMOTE_HOST} ^::1$
RewriteRule  ^OPTIONS  http://www.google.com/  [L]

это мое лучшее предположение, я уверен в RewriteCond, но не совсем с RewriteRule

он будет соответствовать REMOTE_HOST будучи ::1 а затем перепишите запрос для любого URL, начинающегося с OPTIONS на www.google.com