You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by David Christensen <dp...@holgerdanske.com> on 2011/02/20 07:40:43 UTC
[users@httpd] Apache 2.2 URL Rewriting Guide From Static to Dynamic 404 Not Found
script not found or unable to stat: redirect:/printenv.pl
Apache users:
I'm trying to learn how to use the Apache rewrite module to redirect
incoming hits for virtual *.html pages to Perl CGI scripts using the
information provided in the Apache 2.2 manual "URL Rewriting Guide"
chapter "From Static to Dynamic" section:
http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html#static-to-dynamic
For my first test, I am attempting to have hits for the page:
http://bluefish.holgerdanske.com/printenv.html
invoke the script at URL:
http://bluefish.holgerdanske.com/printenv.pl
which resides in file:
/home/dpchrist/bluefish/public_html/printenv.pl
When I invoke the script via its direct URL, everything works:
http://bluefish.holgerdanske.com/printenv.pl
But when I request the URL that is supposed to be rewritten:
http://bluefish.holgerdanske.com/printenv.html
I see:
404 Not Found
and the Apache error log says:
script not found or unable to stat: redirect:/printenv.pl
Also, I have attempted to enable the rewrite log and set the target
directory mode to 0777, but no log file is written (?).
Please see console session, below.
Any suggestions?
TIA,
David
2011-02-19 22:18:15 dpchrist@p43400e ~/bluefish
$ cat /etc/debian_version
6.0
2011-02-19 21:18:20 dpchrist@p43400e ~/bluefish
$ sudo apache2ctl -V
Server version: Apache/2.2.16 (Debian)
Server built: Jan 1 2011 21:57:31
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/worker"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
2011-02-19 21:18:23 dpchrist@p43400e ~/bluefish
$ cat /etc/apache2/apache2.conf | grep '.' | egrep -v '^#'
LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\"
\"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/
2011-02-19 21:25:14 dpchrist@p43400e ~/bluefish
$ l -w 64 /etc/apache2/mods-enabled/
./ autoindex.conf@ mime.load@
../ autoindex.load@ negotiation.conf@
alias.conf@ cgid.conf@ negotiation.load@
alias.load@ cgid.load@ reqtimeout.conf@
auth_basic.load@ deflate.conf@ reqtimeout.load@
authn_file.load@ deflate.load@ rewrite.load@
authz_default.load@ dir.conf@ setenvif.conf@
authz_groupfile.load@ dir.load@ setenvif.load@
authz_host.load@ env.load@ status.conf@
authz_user.load@ mime.conf@ status.load@
2011-02-19 21:54:51 dpchrist@p43400e ~/bluefish
$ cat /etc/apache2/sites-enabled/bluefish.holgerdanske.com
# $Id: bluefish.holgerdanske.com,v 1.5 2011-02-20 05:54:48 dpchrist Exp $
<VirtualHost *:80>
ServerName bluefish.holgerdanske.com
DocumentRoot /home/dpchrist/bluefish/public_html
RewriteLog /home/dpchrist/bluefish/log/rewrite.log
ScriptAlias /cgi-bin/ /home/dpchrist/bluefish/cgi-bin/
</VirtualHost>
2011-02-19 21:54:59 dpchrist@p43400e ~/bluefish
$ sudo apache2ctl configtest
Syntax OK
2011-02-19 21:55:05 dpchrist@p43400e ~/bluefish
$ sudo apache2ctl graceful
2011-02-19 21:55:46 dpchrist@p43400e ~/bluefish
$ l -w 64 public_html/
./ .htaccess favicon.png madewithbluefish-w3cstyle1.png
../ CVS/ index.html printenv.pl@
2011-02-19 21:57:14 dpchrist@p43400e ~/bluefish
$ cat public_html/.htaccess
# $Id: .htaccess,v 1.2 2011-02-20 05:47:55 dpchrist Exp $
Options +ExecCGI
AddHandler cgi-script pl
RewriteEngine on
RewriteBase /
RewriteRule ^printenv\.html$ printenv.pl [H=cgi-script]
2011-02-19 21:59:48 dpchrist@p43400e ~/bluefish
$ cat public_html/printenv.pl
#! /usr/bin/perl
# $Id: printenv.pl,v 1.3 2011-02-20 05:47:55 dpchrist Exp $
print "Content-Type: text/plain\n\n";
foreach my $k (sort keys %ENV) {
print $k, ' ', $ENV{$k}, "\n";
}
2011-02-19 22:00:41 dpchrist@p43400e ~/bluefish
$ wget -O - http://bluefish.holgerdanske.com/printenv.pl
--2011-02-19 22:01:00-- http://bluefish.holgerdanske.com/printenv.pl
Resolving bluefish.holgerdanske.com... 192.168.0.34
Connecting to bluefish.holgerdanske.com|192.168.0.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `STDOUT'
[<=> ] 0 --.-K/s
DOCUMENT_ROOT /home/dpchrist/bluefish/public_html
GATEWAY_INTERFACE CGI/1.1
HTTP_ACCEPT */*
HTTP_CONNECTION Keep-Alive
HTTP_HOST bluefish.holgerdanske.com
HTTP_USER_AGENT Wget/1.12 (linux-gnu)
PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
QUERY_STRING
REMOTE_ADDR 192.168.0.34
REMOTE_PORT 55402
REQUEST_METHOD GET
REQUEST_URI /printenv.pl
SCRIPT_FILENAME /home/dpchrist/bluefish/public_html/printenv.pl
SCRIPT_NAME /printenv.pl
SERVER_ADDR 192.168.0.34
SERVER_ADMIN [no address given]
SERVER_NAME bluefish.holgerdanske.com
SERVER_PORT 80
SERVER_PROTOCOL HTTP/1.0
SERVER_SIGNATURE <address>Apache/2.2.16 (Debian) Server at
bluefish.holgerdanske.com Port 80</address>
SERVER_SOFTWARE Apache/2.2.16 (Debian)
TZ America/Los_Angeles
[ <=> ] 765 --.-K/s in
0s
2011-02-19 22:01:00 (61.2 MB/s) - written to stdout [765]
2011-02-19 22:01:00 dpchrist@p43400e ~/bluefish
$ wget -O - http://bluefish.holgerdanske.com/printenv.html
--2011-02-19 22:01:14-- http://bluefish.holgerdanske.com/printenv.html
Resolving bluefish.holgerdanske.com... 192.168.0.34
Connecting to bluefish.holgerdanske.com|192.168.0.34|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2011-02-19 22:01:14 ERROR 404: Not Found.
2011-02-19 22:01:14 dpchrist@p43400e ~/bluefish
$ sudo tail -n 3 /var/log/apache2/error.log
[Sat Feb 19 22:00:41 2011] [notice] SIGUSR1 received. Doing graceful
restart
[Sat Feb 19 22:00:41 2011] [notice] Apache/2.2.16 (Debian) configured --
resuming normal operations
[Sat Feb 19 22:01:14 2011] [error] [client 192.168.0.34] script not
found or unable to stat: redirect:/printenv.pl
2011-02-19 22:31:26 dpchrist@p43400e ~/bluefish
$ ll -d ~/.
drwxr-xr-x 53 dpchrist dpchrist 4096 Feb 19 21:54 /home/dpchrist/./
2011-02-19 22:34:37 dpchrist@p43400e ~/bluefish
$ ll -d ~/bluefish/
drwxr-xr-x 7 dpchrist dpchrist 4096 Feb 19 22:25 /home/dpchrist/bluefish//
2011-02-19 22:34:44 dpchrist@p43400e ~/bluefish
$ ll -d ~/bluefish/log
drwxrwxrwx 3 dpchrist dpchrist 4096 Feb 19 22:31
/home/dpchrist/bluefish/log/
2011-02-19 22:34:47 dpchrist@p43400e ~/bluefish
$ l log/
./ ../ .cvsignore .exists CVS/
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: [users@httpd] Apache 2.2 URL Rewriting Guide From Static to Dynamic
404 Not Found script not found or unable to stat: redirect:/printenv.pl
Posted by David Christensen <dp...@holgerdanske.com>.
Apache users:
I've boiled the example down, attempted to clarify, and re-posted it on
the debian-user mailing list:
http://lists.debian.org/debian-user/2011/02/msg02171.html
David
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: [users@httpd] Apache 2.2 URL Rewriting Guide From Static to Dynamic
404 Not Found script not found or unable to stat: redirect:/printenv.pl
Posted by David Christensen <dp...@holgerdanske.com>.
On 02/20/2011 12:37 PM, Igor Galić wrote:
> Why?
>> I'm trying to learn how to use the Apache rewrite module
> (http://bash.org/?866112)
As a matter of fact, I *do* know how to operate a jackhammer. Do you
need your demons let out? ;-)
>> Also, I have attempted to enable the rewrite log and set the target
>> directory mode to 0777, but no log file is written (?).
> http://blag.esotericsystems.at/igor/says/no
Oh, isn't he cute!
> You do not, NEVER EVER chmod something 0777. There is no place for
> 0777 on any server. Not even a test server. There is a place for
> 1777 and that place is /tmp and /var/tmp.
I was expecting Apache to run as www-data:
2011-02-20 13:35:44 dpchrist@p43400e ~/bluefish
$ sudo grep -r APACHE_RUN_USER /etc
/etc/apache2/envvars:export APACHE_RUN_USER=www-data
/etc/apache2/apache2.conf:User ${APACHE_RUN_USER}
But, Apache seems to be running as root:
2011-02-20 14:00:57 dpchrist@p43400e ~/bluefish
$ chmod 0755 log
2011-02-20 14:06:11 dpchrist@p43400e ~/bluefish
$ sudo rm log/rewrite.log
2011-02-20 14:06:18 dpchrist@p43400e ~/bluefish
$ sudo apache2ctl graceful
2011-02-20 14:06:25 dpchrist@p43400e ~/bluefish
$ ll log/rewrite.log
-rw-r--r-- 1 root root 0 Feb 20 14:06 log/rewrite.log
So, you're right -- mode 0777 wasn't necessary in this case.
(Perhaps a Debian bug report is in order...)
> Generally, mod_rewrite is debugged using RewriteLog.
> http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritelog
> But see below.
> Aha.. might want to check out:
> http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritelog
> later on...
>> RewriteLog /home/dpchrist/bluefish/log/rewrite.log
Unfortunately, it's empty. (Another Debian bug report?)
> How many people, I wonder, have mod_authz_groupfile loaded
> without using it?
587,243, give or take. ;-)
> Why when you have full access to the config do you put your
> rewrite rules in .htaccess?
Because I don't have full access to the config file on shared hosting
servers.
> Please their documentation for what they are good for:
> http://httpd.apache.org/docs/current/howto/htaccess.html
Yes, I've read that: past, present, and future. :-)
> Finally, I fail to see why you're even using rewrite for that thing?
> You could just name your files .html, make them executable.
So, if I want HTML pages to be generated by Perl scripts named *.html,
then should I write HTML pages named *.pl to generate my Perl scripts?
Do I then pipe the output of wget to perl -e? But, how do I feed that
into Apache to generate the HTML page? Perhaps I should really use
*.html for Bash scripts? ;-)
> Options +ExecCGI would only pick up those that are exectuable.
> Of course that's not "transparent" but if you're looking for
> transparency, why not just *drop* .html *and* .pl from the *Request*
> and have Options +MultiViews take care of serving the right file?
http://httpd.apache.org/docs/2.2/mod/core.html#options
http://httpd.apache.org/docs/2.2/content-negotiation.html
http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html
Interesting.
> See my last mail to users@ which, too, suggests avoiding mod_rewrite:)
> http://www.mail-archive.com/users@httpd.apache.org/msg46255.html
http://wiki.apache.org/httpd/WhenNotToUseRewrite
"These examples assume the RewriteRules are not placed in a directory
context (i.e., not in a .htaccess file nor in a <Directory> section)."
For this test, the rewrite rules are in .htaccess.
http://httpd.apache.org/docs/trunk/rewrite/avoid.html
"The most common situation in which mod_rewrite is the right tool is
when the very best solution requires access to the server configuration
files, and you don't have that access. Some configuration directives are
only available in the server configuration file. So if you are in a
hosting situation where you only have .htaccess files to work with, you
may need to resort to mod_rewrite."
Shared hosting without access to the server configuration files is the
use-case I am testing.
David
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: [users@httpd] Apache 2.2 URL Rewriting Guide From Static to Dynamic 404 Not Found script not found or unable to stat: redirect:/printenv.pl
Posted by Igor Galić <i....@brainsware.org>.
----- Original Message -----
> Apache users:
>
> I'm trying to learn how to use the Apache rewrite module to redirect
> incoming hits for virtual *.html pages to Perl CGI scripts using the
> information provided in the Apache 2.2 manual "URL Rewriting Guide"
> chapter "From Static to Dynamic" section:
Why? (http://bash.org/?866112)
>
> http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html#static-to-dynamic
>
>
> For my first test, I am attempting to have hits for the page:
>
> http://bluefish.holgerdanske.com/printenv.html
>
> invoke the script at URL:
>
> http://bluefish.holgerdanske.com/printenv.pl
>
> which resides in file:
>
> /home/dpchrist/bluefish/public_html/printenv.pl
>
>
> When I invoke the script via its direct URL, everything works:
>
> http://bluefish.holgerdanske.com/printenv.pl
>
>
> But when I request the URL that is supposed to be rewritten:
>
> http://bluefish.holgerdanske.com/printenv.html
>
> I see:
>
> 404 Not Found
>
> and the Apache error log says:
>
> script not found or unable to stat: redirect:/printenv.pl
>
>
> Also, I have attempted to enable the rewrite log and set the target
> directory mode to 0777, but no log file is written (?).
http://blag.esotericsystems.at/igor/says/no
You do not, NEVER EVER chmod something 0777. There is no place for
0777 on any server. Not even a test server. There is a place for
1777 and that place is /tmp and /var/tmp.
> Please see console session, below.
>
>
> Any suggestions?
Generally, mod_rewrite is debugged using RewriteLog.
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritelog
But see below.
> TIA,
>
> David
>
>
>
> 2011-02-19 22:18:15 dpchrist@p43400e ~/bluefish
> $ cat /etc/debian_version
> 6.0
Aha.. might want to check out:
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritelog
later on...
[snip]
> 2011-02-19 21:25:14 dpchrist@p43400e ~/bluefish
> $ l -w 64 /etc/apache2/mods-enabled/
> ./ autoindex.conf@ mime.load@
> ../ autoindex.load@ negotiation.conf@
> alias.conf@ cgid.conf@ negotiation.load@
> alias.load@ cgid.load@ reqtimeout.conf@
> auth_basic.load@ deflate.conf@ reqtimeout.load@
> authn_file.load@ deflate.load@ rewrite.load@
> authz_default.load@ dir.conf@ setenvif.conf@
> authz_groupfile.load@ dir.load@ setenvif.load@
How many people, I wonder, have mod_authz_groupfile loaded
without using it?
> authz_host.load@ env.load@ status.conf@
> authz_user.load@ mime.conf@ status.load@
>
>
>
> 2011-02-19 21:54:51 dpchrist@p43400e ~/bluefish
> $ cat /etc/apache2/sites-enabled/bluefish.holgerdanske.com
> # $Id: bluefish.holgerdanske.com,v 1.5 2011-02-20 05:54:48 dpchrist
> Exp $
> <VirtualHost *:80>
> ServerName bluefish.holgerdanske.com
> DocumentRoot /home/dpchrist/bluefish/public_html
> RewriteLog /home/dpchrist/bluefish/log/rewrite.log
> ScriptAlias /cgi-bin/ /home/dpchrist/bluefish/cgi-bin/
> </VirtualHost>
[snip]
> 2011-02-19 21:57:14 dpchrist@p43400e ~/bluefish
> $ cat public_html/.htaccess
> # $Id: .htaccess,v 1.2 2011-02-20 05:47:55 dpchrist Exp $
> Options +ExecCGI
> AddHandler cgi-script pl
> RewriteEngine on
> RewriteBase /
> RewriteRule ^printenv\.html$ printenv.pl [H=cgi-script]
Why when you have full access to the config do you put your
rewrite rules in .htaccess?
Please their documentation for what they are good for:
http://httpd.apache.org/docs/current/howto/htaccess.html
Finally, I fail to see why you're even using rewrite for that thing?
You could just name your files .html, make them executable.
Options +ExecCGI would only pick up those that are exectuable.
Of course that's not "transparent" but if you're looking for
transparency, why not just *drop* .html *and* .pl from the *Request*
and have Options +MultiViews take care of serving the right file?
See my last mail to users@ which, too, suggests avoiding mod_rewrite:)
http://www.mail-archive.com/users@httpd.apache.org/msg46255.html
i
--
Igor Galić
Tel: +43 (0) 664 886 22 883
Mail: i.galic@brainsware.org
URL: http://brainsware.org/
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org