3

I have Apache 2.2.4 server with a lot of messages like this in the 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

These are the "internal dummy connections" as explained on this page:

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

The page also hits my main problem: "In 2.2.6 and earlier, in certain configurations, these requests may hit a heavy-weight dynamic web page and cause unnecessary load on the server. You can avoid this by using mod_rewrite to respond with a redirect when accessed with that specific User-Agent or IP address."

Well, obviously I cannot use UserAgent because I minimized the server signature, but I could use IP address. However, I don't have a clue what should the RewriteCond and RewriteRule look for IPv6 address ::1.

The website where this runs is using CodeIgniter, so there is already the following .htaccess in place, I just need to add to it:

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

Any idea how to write this .htaccess rule?

Solved: Adding another rule makes OPTIONS fall through current rules and be handled the same way as Apache is doing by default.

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]

I never access the website via localhost on IPv6, so this works great.

Milan Babuškov
  • 1,010
  • 2
  • 15
  • 19

1 Answers1

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

that's my best guess, i'm certain of the RewriteCond, but not quite with the RewriteRule

it will match on the REMOTE_HOST being ::1 and then rewrite a request for any URL starting with OPTIONS to www.google.com

cpbills
  • 2,692
  • 17
  • 12
  • also perhaps `RewriteCond %{REQUEST_URI} ^OPTIONS.*` and `RewriteRule ^(.*)$ http://google.com/ [L]` but only educated guessing – cpbills May 16 '10 at 00:16
  • Thanks, your rule gave me the idea how to solve it, so I'll mark your answer as accepted. – Milan Babuškov May 16 '10 at 00:26
  • what did you end up needing to do? and glad i could sort of help :) – cpbills May 16 '10 at 00:54
  • 1
    I updated my question with the solution. – Milan Babuškov May 16 '10 at 01:07
  • Old question, but hey... From the access log in the question, `OPTIONS` isn't part of the URL-path. "OPTIONS" is the request _method_ (as opposed to GET or POST). With mod_rewrite you can check for this against the `REQUEST_METHOD` server variable in a `RewriteCond` directive. – MrWhite Feb 22 '17 at 23:17