Is there a way to send the request URI along to the 404 page as a URL variable? For instance, if I forward my 404's with an ErrorDocument
directive, is there a way to do something like this? This is the code I tried but it obviously didn't work.
ErrorDocument 404 /pages/errors/index.php?e=404&url=%{REQUEST_URI}
I also tried a mod_rewrite, but I couldn't get that working either. Here is what I tried with mod_rewrite:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /pages/errors/index.php?e=404&url=%{REQUEST_URI} [L,R=404]
Basically all I'm trying to do is so that when a user types in something like http://mysite.com/asdf
then it forwards to http://mysite.com/pages/errors/index.php?e=404&url=/asdf
assuming that the directory /asdf
does not exist on the server.
Is there an easy way to achieve this?
I don't think you have to pass any additional information to the error handler script, if that's what your question is about. Apache supplies enough information:
Redirecting to another URL can be useful, but only if some information can be passed which can then be used to explain or log the error condition more clearly.
To achieve this, when the error redirect is sent, additional environment variables will be set, which will be generated from the headers provided to the original request by prepending 'REDIRECT_' onto the original header name. This provides the error document the context of the original request.
For example, you might receive, in addition to more usual environment variables, the following.
REDIRECT_HTTP_ACCEPT=/, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl
REDIRECT_ environment variables are created from the environment variables which existed prior to the redirect. They are renamed with a REDIRECT_ prefix, i.e., HTTP_USER_AGENT becomes REDIRECT_HTTP_USER_AGENT.
REDIRECT_URL, REDIRECT_STATUS, and REDIRECT_QUERY_STRING are guaranteed to be set, and the other headers will be set only if they existed prior to the error condition.
None of these will be set if the ErrorDocument target is an external redirect (anything starting with a scheme name like http:, even if it refers to the same host as the server).
Check this link
I think you need to remove R=404
. This worked for me;
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?e=404&url=%{REQUEST_URI} [L]
Tests: foo/index.php
: print_r($_GET)
localhost/foo -> Array ( )
localhost/foo/asdf -> Array ( [e] => 404 [url] => /foo/asdf )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With