У меня есть сервер 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