RewriteEngine On
ErrorDocument 404 /exception/404.php
//if url ends with .php/ , show custom 404 page
RewriteRule .php/$ - [R=404,L]
//this line caused the custom 404 page broken
RewriteRule .php$ - [R=404,L]
before I added line 4: speedcubing.top/index.php
(show the index page)
speedcubing.top/index.php/
(show custom 404 page)
after I added line 4: speedcubing.top/index.php speedcubing.top/index.php/
they both showing:
Not Found
The requested URL was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
ErrorDocument
directive and RewriteRule
directive are from different Apache modules that run at different times. Hence setting R=404
doesn't cause Apache to invoke ErrorDocument
handler and it ends up showing default 404
Apache handler.
You should add this line in your /exception/404.php
to set a custom http response code:
<?php
http_response_code(404);
// rest of the code
?>
And have your .htaccess code like this:
ErrorDocument 404 /exception/404.php
RewriteEngine On
# if url ends with .php or .php/, show custom 404 page
RewriteCond %{REQUEST_URI} !^/exception/404\.php$ [NC]
RewriteRule \.php/?$ exception/404.php [NC,L]