17

We write a lot of code to htaccess but what is the best method to debug other than refreshing the page ?

Is there some way that I can write it out to a file ? or is there some echo/print function ?

Simply how do i know what my $1 $2 $3 is ?

Devrim
  • 1,197
  • 4
  • 16
  • 29
  • As of 12/24/20 all the answers deal with rewrite rules, rather than logging a string in order to debug an .htaccess file in general. And if I add an invalid command, such as "got here" to my .htaccess file, I get a 500 HTTP error logged telling me that "got" is an invalid command, but with no indication even as to the line number of the invalid command. And no, there is no "echo" or "write a string to a file" Apache directive. – David Spector Dec 24 '20 at 19:28

3 Answers3

9

Try these:

RewriteLog "/myfolder/mylogfile.log" 
RewriteLogLevel 3

These are just Regular Expressions with some additions, so you can use Regex Coach for initial testing against URLs, or any other Regex debugging tools.

Cheers! :)

kolypto
  • 10,738
  • 12
  • 51
  • 66
  • 1
    Very useful tool, but remember to remove it after debugging as your can get a massive log file! – Coops Nov 24 '09 at 10:22
  • 7
    Apparently this doesn't work in `.htaccess` files. It has to go in `httpd.conf` which means it's usually not achievable on shared hosting accounts. :-( – Simon East Jul 02 '13 at 04:31
8

You could try the method mentioned in blog post titled A Couple Ways to Debug mod_rewrite (WaybackMachine copy):


Basically what you do is dump some of the info that mod_rewrite is using back out into the headers then use the Firebug or LiveHTTP Headers extensions in Firefox to watch the headers and read your debug info.

In .htaccess use the condition and rule:

RewriteCond %{QUERY_STRING} !vardump
RewriteRule (.*) http://www.example.com/$1?vardump&thereq=%{THE_REQUEST}&reqhost=%{HTTP_HOST} [R=302,L,QSA]
nEJC
  • 684
  • 5
  • 4
  • I would suggest making 302 redirect to avoid troubles with cached 301 result in a browser after finishing a test. – IPSUS Mar 28 '19 at 14:03
  • The URL in this post is gone; from the rest of the post: what is `vardump`? And what does the above snipped have to do with headers? – sdbbs Oct 18 '21 at 11:59
  • To test this (without having to reload the URL in the browser every time), I'm calling `curl -s -i http://example.com/test-url | head -n10` – hargobind Mar 03 '22 at 09:29
3

Here is an interesting little hack to "echo" out variables from an .htaccess file.

If you have AllowOverride set to FileInfo you can set and trigger a custom error response in your .htaccess file with the desired variables in the output:

ErrorDocument 404 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=404]

Depending on how creative you are with expressions you can output quite alot of useful information!

You are not limited to using the 404 status on your "echoed" content. You can even override the status 200 "ErrorDocument"--which coupled with <If> directives could make for some other pretty interesting uses of this hack to return content directly from an .htaccess file.

PeterA
  • 171
  • 5