I am using .htaccess in my project, i just use the following code
ErrorDocument 404 /404.php
in the .htaccess inside the root folder, but it does not redirect to 404.php while trying to open the misspelt webpage.
I want to know whether there is syntax error in the .htaccess file.
I used .html file instead for .php file. but it throws the same error.
Not Found
The requested URL /ht/re was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
first you have to locate your errorpage
i.e. on local server my 404.php in root/error then
ErrorDocument 404 /error/404.php
here first slash is root of server
your server could not find 404.php thats problem so locate your 404.php
Related
How I can redirect to my error page?
My directory structure:
Inside .htaccess file:
ErrorDocument 404 /Index.php?controller=Main&action=error
I don't know how correctly to tell, but it redirects me to ../ back one level.., in xampp ../ will be Index file...And show:
I want on 404 error redirect to Index.
I try in .htaccess file add this line:
ErrorDocument 404 Index.php?controller=Main&action=error
but without / flash its show text like this:
Enter an absolute URI, like ErrorDocument 404 /Index.php?controller=Main&action=error
See https://httpd.apache.org/docs/2.4/mod/core.html#errordocument
I have a .htaccess file in the root directory and also 404.php file there. Content of my .htaccess file is:
ErrorDocument 404 /404.php
But when I am mis-spelling my url, 404.php is not opening. Instead I am getting following message:
Not Found
The requested URL /mywebsite/ites.php was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to
use an ErrorDocument to handle the request.
But when I tried ErrorDocument 404 google.com, it worked.
I'll consolidate my comments to this answer:
When setting ...
ErrorDocument 404 /404.php
the /404.php path may not be the absolute path to your htdocs folder root but instead the root of your filesystem. This may be, based on your configuration, e.g. /home/htdocs/ or ~ and so on.
So what one need to do is find out the absolute path and set it accordingly.
Where is your 404.php actually located in relation to your .htaccess file? Can you simply run it as a direct URL? Is the file readable by the server? Or is it in a nested subdirectory? You can also try the full URL as well:
ErrorDocument 404 http://mygreat.server/404.php
Full details in the official Apache documentation here.
You use ErrorDocument like so:
ErrorDocument <3-digit-code> <action>
The <3-digit-code> is a HTTP response status code (eg. "404").
And you have three types of <action> that are triggered by what you type:
If the action begins with a "/": A local path to redirect to.
If the action is a valid URL: An external URL to redirect to.
If neither of the above: Text to be displayed. (The text must be wrapped in quotes (" ") if it consists of more than one word.)
For example:
Local path:
ErrorDocument 404 /local/path/to/404.php
External URL:
ErrorDocument 404 http://external_url.example.com/server_error.html
Custom text:
ErrorDocument 404 "Oops! We can't find that pesky file. Sorry."
You've chosen a local path, but are probably not pointing correctly to the file from the server's perspective. Note that local server paths are not what you see in your URL, and often include things like ~/htdocs/www/domainname/.
The problem is most likely that your path to 404.php is wrong, and cannot be found by your server.
IN MY LOCAL (WAMP) SERVER:
I have this .htaccess file
Options +FollowSymLinks
RewriteEngine On
ErrorDocument 404 /views/oops.php
ErrorDocument 500 /views/oops.php
ErrorDocument 400 /views/oops.php
In my httpd.conf this line is Uncommented
LoadModule rewrite_module modules/mod_rewrite.so
The HTACCESS File is in the application root folder. When I visit this URL:
localhost/mywebapp/views/home.php
It works perfect, shows the home page. And if I enter something like
localhost/mywebapp/views/thisdoesnotexist OR localhost/mywebapp/thisdoesnotexist
I want it to show me my error page, but it's showing the default and ugly error page.
Thank you beforehand.
EDIT: This is what it shows on error
Not Found
The requested URL /myapp/thisdoesnotexist was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
I'm guessing that the oops.php file is actually in the mywebapp folder, as opposed to the document root. The path that the ErrorDocument directive takes is an absolute URL, not relative to where the htaccess file is in. So you need to make sure the path points to the actual location of the error document:
ErrorDocument 404 /mywebapp/views/oops.php
ErrorDocument 500 /mywebapp/views/oops.php
ErrorDocument 400 /mywebapp/views/oops.php
The below is my .htaccess file placed in the root
ErrorDocument 404 http://www.abc.com/404.php Redirect
/services/something.php http://www.abc.com/index.php
The second line is irrelevant I guess.
The problem is that it redirects any non existent file to my 404.php perfectly when I run it in my local WAMP server. But with the same is not happening when I upload it to my server. What could be wrong?
Also, if I write
ErrorDocument 404 /404.php instead of ErrorDocument 404 http://www.abc.com/404.php it won't even work in the localhost.
I get the error message saying
The requested URL /abc/xxxx was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to
use an ErrorDocument to handle the request.
Why does this error occur when every website I refer has recommended ErrorDocument 404 /404.php
first of all make sure that the 404.php is present in the proper location and http://www.abc.com/404.php is working properly.
if both 404.php and .htaccess are present in the same root folder, then
try changing following line in .htaccess file
ErrorDocument 404 /404.php
to
ErrorDocument 404 /root/404.php
How do I do this in my .htaccess file for a specific directory in my document root?:
deny all access to anything (including the .htaccess too)
return a 404, not a 403 error
no files or subdirectories should be accessible or detected by humans or bots
only php access by the local host would be allowed
Seems like it would be simple. This works but throws a 403 not a 404:
deny from all
Why not create a custom error page?
deny from all
ErrorDocument 403 /error/404.html
The server will always want to throw a 403 error if someone is not authorized to view the page and that's what you're trying to do. However, you can change the ErrorDocument for error 403 to show an HTML page that says it's a 404 error.
My example has a folder in the root directory named error and an html file in it named 404.html.
Have you tried something like this? This will force a 403 Forbidden error when someone tries to view anything in DIRECTORY. PHP scripts can still access everything inside the directory. Obviously replace DIRECTORY with your preferred directory.
RewriteRule ^DIRECTORY - [F]
I do not like sending some html page that says it's a 404 error when really it is just an html page that may as well be located at Iamafake404error.html
You might try this instead:
Order Deny,Allow
Deny from all
Allow from 1.2.3.4
ErrorDocument 403 /throwaREAL404error.html
ErrorDocument 404 /throwaREAL404error.html
ErrorDocument 500 /throwaREAL404error.html
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\throwaREAL404error.html+ - [R=404,L]
# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\throwaREAL404error+
https://serverfault.com/a/510951/194845