Forum Topic: Customizing logs via .htaccess don’t work

Forum: .htaccess Forum : General • Posted by jack woys • Updated:

Hello,Jeff

I add your code to .htaccess, but it don’t work,why?

SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.jpe image-request
SetEnvIf Request_URI \.png image-request
SetEnvIf Request_URI \.ico image-request
CustomLog logs/access_log common env=!image-request
  1. I test it at hostmonster.com webhosting, I vist www.abc.com/test/hp.jpg, there have error: an error occurred while processing this directive
  2. I test it at our VPS hosting, I vist www.abc.com/test/hp.jpg, there have a 500 error, move .htaccess to subfolder, 404 error.

Please help me,Thank you.

6 Replies to “Customizing logs via .htaccess don’t work”

Posted by Jeff Starr

Hi Jack,

It looks like the path name may be incorrect. According to the Apache Docs, it needs to be specified according to the server root. If this is the case, remember that the log file needs to be created by you and given the appropriate permissions on the server. Then, in the code, the file path must be correct, and relative to the server root, as explained here:

https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#customlog

If, after setting up the actual log file, you aren’t sure of its relative path to the server root, ask your host. They would best be able to provide that information.

Another possible issue could be that the functionality is disabled on your server. Again, ask your host if mod_log_config is enabled on the server. If not, that’s the issue right there.

Good luck.

Posted by jack woys •

Thank you for your reply.

I still don’t understand about error, problem at this code:

CustomLog logs/access_log common env=!image-request

Can you give me a example for set the path name?

I login to my FTP root directory, I can see these:

/access-logs/mysite.com (this is my log file)

/publice_html/ (this is my web directory)

Posted by jack woys •

I test these code at other hosting:

SetEnvIf Request_URI \.gif image-request
CustomLog /var/log/apache2/access.log common env=!image-request

or

SetEnvIf Request_URI \.gif image-request
CustomLog log/apache2/access.log common env=!image-request

But show same error:

less /var/log/apache2/access.log | grep /images/pic/8.gif

115.210.31.78 - - [03/Apr/2013:08:35:10 -0400] "GET /images/pic/8.gif HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0"
Posted by Jeff Starr

Unless there is a syntax error on the server, the code should work.. as you can see it’s the same code as provided in the official Apache Docs.

Even so, it looks like the issue is related to either:

a) CustomLog functionality has been disabled or is not available (ask your host)

b) And/or there is an issue with the file path.

If it’s path-related, try the following:

1) Create a blank PHP file named test.php and upload it to the same directory as the blackhole

2) Inside of test.php, add this code:

<h3><?php echo $_SERVER['DOCUMENT_ROOT']; ?></h3>
<h3><?php echo $_SERVER['PHP_SELF']; ?></h3>
<h3><?php echo dirname(__FILE__);?></h3>
<h3><?php echo getcwd(); ?></h3>

3) Visit that file in the browser, so the URL will be something like:

http://example.com/path/to/test.php

The file will display four similar paths, one of which should be the right one to use for the CustomLog directive.

Posted by jack woys •

I can see these:

/home/dev/domains/mydomain.com/public_html
/test/test.php
/home/dev/domains/mydomain.com/public_html/test
/home/dev/domains/mydomain.com/public_html/test

How to write .htaccess code ?

Posted by Jeff Starr

Okay, so then for the CustomLog directive, try using this line:

CustomLog home/dev/domains/mydomain.com/public_html/custom.log common env=!image-request

Then, make sure that the file, custom.log exists in that location (i.e., the root of your domain), and also make sure it’s writable by changing it’s permissions. First try 755, then 775, then if neither of those permissions work, use 777 (which is safe because it’s a plain-text file).

That should do it – let me know how it goes.