Link to home
Start Free TrialLog in
Avatar of gregsschipper
gregsschipper

asked on

Need .htaccess expression to trap missing pages

Hello Brilliant Ones!

ATTENTION: I need an mod_rewrite PRO, I will pay you. Greg 210 493 6193

I need an .htaccess expression to trap missing pages.

I'm using this currently in Joomla:

########## Begin - Joomla! core SEF Section
# My extra line below to direct any .htm pages to page.php (working)
RewriteRule ^([^/]*)\.htm$ /page.php?str=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section

# In these lines I want to trap ANY remaining NOT found files, and direct to page.php with including the name sent to [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*) /page.php?str=$1 [L]   (not working, gets 404)


I know I have 2 lines of;
RewriteCond %{REQUEST_FILENAME} !-f

I don't know how to make this work...

Thanks, Greg
Avatar of ahoffmann
ahoffmann
Flag of Germany image

# did you use this as last rule?
RewriteRule ^([^/]*) /page.php?str=$1 [L]

# if so, you may try
RewriteRule ^([^/]*)$ /page.php?str=$1 [L]
I do not use Joomla, so I do not know if this will work for you but it works for me and you might be able to test it fairly easily,  Here is my .htaccess:
ErrorDocument 404 /404handler.php

Open in new window

And here is my 404handler script:
<?php // 404handler.php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('log_errors', TRUE);
session_start();

if (isset($_SERVER["REQUEST_URI"]))
{
    // LOG THE ERROR
    error_log('404: ' . $_SERVER["REQUEST_URI"]);

    // SAVE THE REQUEST
    $_SESSION["REQUEST_URI"] = $_SERVER["REQUEST_URI"];

    // IF A PHP SCRIPT IS NOT FOUND GO TO THE HOME PAGE
    if (preg_match('#\.php#i', $_SERVER["REQUEST_URI"]))
    {
        header("HTTP/1.0 404 Not Found");
        header('Location: /');
        exit;
    }

    // IF A NON-PHP SCRIPT IS NOT FOUND, TRY IT WITH PHP
    $arr = explode('?', $_SERVER["REQUEST_URI"]);
    $arr[0] .= '.php';
    $uri = implode('?', $arr);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $uri");
    exit;
}

// IF NO REQUEST URI
header("HTTP/1.0 404 Not Found");
header('Location: /');
exit;

Open in new window

HTH, ~Ray
ASKER CERTIFIED SOLUTION
Avatar of gregsschipper
gregsschipper

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
where is the r/ comming from? you never mentioned it before ...
Avatar of gregsschipper
gregsschipper

ASKER

If I use the r/ it doesn't interfere with Joomla functionality!
Thx Greg
so you rewriting only URLs which contain r/ now, that was not your question, just wondering ...
I found a solution elsewhere.