Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

My requirement looks Simple, But Googling Did not help me yet.
my query is
i want to Throw a 404 page to a user(Not Re-Direct to another folder or file), who is trying to Access *.php files in my website

ex: when a client asks for www.example.com/home/ i want to show the content , but when user says

www.example.com/home/index.php i want to show a 404 page.

i tried different methods, nothing worked for me, one of which tried is shown below

<Directory "C:/xampp/htdocs/*">
    <FilesMatch "^\.php">
        Order Deny,Allow
        Deny from all
        ErrorDocument 403 /test/404/
        ErrorDocument 404 /test/404/
    </FilesMatch>
</Directory>

Thanks in Advance

share|improve this question

migrated from stackoverflow.com Nov 21 '12 at 9:49

This question came from our site for professional and enthusiast programmers.

2 Answers 2

up vote 0 down vote accepted

this is my .htaccess file. you can demo it out here: http://mathpdq.com/demo2 or
http://mathpdq.com/demo2/index.php

AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /demo2
    RewriteCond %{HTTP_HOST} ^mathpdq\.com
    RewriteRule ^(.*)$ http://www.mathpdq.com/demo2/$1 [R=permanent,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
share|improve this answer
    
This solution is working when i request the folder, but when i request folder/index.php instead of showing my 404 page it shows Not found error "The requested URL /test/index.php was not found on this server." also it shows "Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request." –  Oxi Nov 20 '12 at 13:08
    
@Oxi I modified my answer. in addition to what I think you are looking for it forces the url to have www at the beginning –  Drew Pierce Nov 20 '12 at 13:18
    
i am not using .htaccess, i added you code snippet with small modification into my Directory as shown below RewriteEngine On RewriteBase /test RewriteCond %{HTTP_HOST} ^localhost RewriteRule ^(.*)$ http://localhost/test/$1 [R=permanent,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] This gives me an infinite loop –  Oxi Nov 20 '12 at 13:54
    
lancelhoff.com/enabling-htaccess-in-apache-on-windows –  Drew Pierce Nov 20 '12 at 14:01

Just a basic rewrite rule, you can place this as .htaccess file in your folder or in your server config or virtual host config

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

//allowed files, just remove the ! to use this rule to deny
RewriteCond %{REQUEST_URI} !.*\.(css|js|jpg|gif|png|zip|tff)

//redirect location
RewriteRule (.*) /public/www/404.php
share|improve this answer
    
This makes my server Just opposite to what is intended :) .. When i request with folder name it throws "Internal Server Error" and when i request folder/index.php it works fine –  Oxi Nov 20 '12 at 12:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.