2016-08-20 4 views
2

I websitename.com/file.php werden websitename.com/file/ machen wollen und nach durch Stackoverflow Surfen mit unzähligen Versuch und Irrtum, das ist, was ich habe und es funktioniert .Mod Rewrite und 404 umleiten

RewriteEngine on 
RewriteRule ^(.*)\/$ $1.php [NC] 

Ich habe auch dies so Header.php dass, wenn eine Dateinamen mit der Endung .php zeigt sich, es auf die ‚aufgeschlitzt‘ URL umleiten will ich wollte.

$NoPhpUrl = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
$NoPhpUrl = $NoPhpUrl .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
if(strstr($NoPhpUrl , ".php")) 
{ 
    $NoPhpUrl = str_replace(".php","/", $NoPhpUrl); 
    header("Location: ".$NoPhpUrl); 
} 

Die Frage, die ich zur Zeit habe, ist, wenn ich diesen Link websitename.com/file eingeben (ohne Schrägstrich am Ende), wird es zu einer 404-Seite.

Ich bin in Ordnung mit der 404-Seite, wenn die Datei nicht in dem Verzeichnis vorhanden ist. Aber wenn es so ist, gibt es eine Möglichkeit, den Schrägstrich am Ende der URL (wenn die Datei existiert) zu erzwingen, ohne dass es in 404 geht?

Antwort

2

Sie sollten Ihre Regeln auf diese Weise versuchen und auch Multiviews deaktivieren. Ich fügte den folgenden Schrägstrich als hinzu Ich würde es in Apache anstelle von PHP tun. Serverseite sollte gegenüber Code-Weiterleitungen bevorzugt werden.

Options -MultiViews 
RewriteEngine on 

#force trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ [NC] 
RewriteRule ^(.*)$ /$1/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)/$ $1.php [L,NC] 
+0

Danke! Der nachfolgende Slash-Befehl funktioniert, aber wenn die Datei nicht im Verzeichnis vorhanden ist, wird die Seite einige Zeit geladen und angezeigt: websitename.com/filenoexist.php.php.php.php.php.php.php. php.php.php.php.php.php.php.php.php.php.php/ –

+0

Ok ich habe die letzte Regel etwas modifiziert. –

+0

ES IST PERFEKT !! Vielen Dank!! –

2

checken Sie in Ihrer if-Bedingung ein, ersetzen Sie .php mit /. Das ist der Grund, warum Sie im Pfad ohne/nicht zugreifen können. Auschecken.