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 ?
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.
Sign up to join this communityWe 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 ?
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]
vardump
? And what does the above snipped have to do with headers?
curl -s -i http://example.com/test-url | head -n10
Mar 3, 2022 at 9:29
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! :)
.htaccess
files. It has to go in httpd.conf
which means it's usually not achievable on shared hosting accounts. :-(
Jul 2, 2013 at 4:31
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.
Perhaps the best way to debug rewrite rules is not to use rewrite rules at all, but to defer URL processing from the htaccess file to a PHP file (let's call it router.php). Then, you can use PHP to do any manipulating you like, with proper error detection and the usual ways to do debugging. This even runs faster, too, since you don't have to use the rewriting module.
To transfer control immediately from .htaccess to router.php, just put the following line in .htaccess:
FallbackResource router.php
Yes, it's really that easy. And yes, it really works. Give it a try. Note that you may have to handle some error conditions in router.php instead of relying on ErrorDocument directives.