2016-10-08 3 views
1

Alles auf meiner Seite funktioniert, außer dass nicht vorhandene Seite als Parameter erkannt wird und die Seite mit Kopf- und Fußzeile angezeigt wird.htaccess nicht umleiten zu benutzerdefinierten 404

ErrorDocument 404 /error 
ErrorDocument 403 /error 
ErrorDocument 500 /error 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?v=$1 [L,QSA] 
RewriteRule ^(.*)-(.*)-(.*)$ index.php?v=$1&page=$2&folder=$3 [L,QSA] 

Wenn ich versuche, mydomain.com/non-existing-page zu öffnen als "non-existing-Seite" als Parameter $ v und Seite mydomain.com/index.php$v=non-existing anerkannt -page wird nur mit Header-Fußzeile und ohne Inhalt geöffnet.

+0

die Sinn machen, aber die meisten meiner Links können nur einen Parameter '$ v' so sieht meine Links, wie die' mydomain.com/contact' – Solver

+0

Ok. Ich hätte meine Frage anders konstruieren sollen. Wenn ich zuerst 'RewritRule' lösche, werden alle einzelnen Parameter-Seiten (zB .:' mydomain.com/contact') nicht geöffnet. Nur einige Seiten verwenden mehr als einen Parameter. Wie geht man damit um? – Solver

Antwort

1

Sie können .* mit [^/-]+ ändern, damit nur einzelne Parameter (ohne Schrägstrich + Bindestrich) von index.php verarbeitet werden können.

Sie können diese Regeln verwenden:

ErrorDocument 404 /error 
ErrorDocument 403 /error 
ErrorDocument 500 /error 

RewriteCond %{SCRIPT_FILENAME} -d [OR] 
RewriteCond %{SCRIPT_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^([^/]+)-([^/]+)-([^/]+)/?$ index.php?v=$1&page=$2&folder=$3 [L,QSA] 
+0

Genau dasselbe passiert. Wenn ich versuche, 'mydomain.com/non-existing-page' zu ​​öffnen, wird" non-existing-page "als Parameter' $ v' und Seite 'mydomain.com/index.php$v=non-existing-page erkannt 'ist nur mit Header-Fußzeile und ohne Inhalt geöffnet. – Solver

+0

gleiche Sache. Aber ich sehe jetzt wo das Problem liegt. Alles, was nach "mydomain.com /" übergeben wird, wird als $ v-Parameter behandelt. Auf meiner Inhaltsseite habe ich das 'if ($ v == 'contact') {include ('page/contact.php');}' – Solver

+0

Ja, das stimmt und das habe ich versucht, in Kommentaren zu erklären. Ihre andere Regel (die ich geändert habe) behandelt Pfade mit 2 Bindestrichen. Wenn Ihr URI '/ foo-bar' mit einem Bindestrich ist, wird es 404? – anubhava