Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » Sonstige Sprachen » .htaccess und if else?    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
     .htaccess und if else? Zitat | Bearbeiten

Guten Abend / Morgen,

ich habe eine .htaccess Datei die folgendes macht:

RewriteRule ^(.*)/(.*)/(.*) index.php?art=$1&id=$2&option=$3


nun möchte ich aber da der Wert Option nicht immer gesetzt ist eine art verzweigung machen die überprüft ob art, id und option gesetzt ist.


RewriteRule ^(.*) index.php?art=$1

RewriteRule ^(.*)/(.*) index.php?art=$1&id=$2

RewriteRule ^(.*)/(.*)/(.*) index.php?art=$1&id=$2&option=$3

Der Grund ist, das wenn jetzt nur art und id gesetzt sind muss da so aussehen:

domain.de/art/id/

wenn man das so eingibt

domain.de/art/id

bekomme ich eine Fehlerseite da ein / am Ende erwartet wird

Ich hoffe mir kann jemand helfen, ich finde leider nichts und komme auch nicht wirklich weiter. =/


Danke im voraus für eure Hilfe!!

Gruß
Phylus


27.12.2013, 03:38 Profil | PM | E-Mail  
FalkenaugeMihawk
Mitglied
Perfekter User


Dabei seit: 05.06.2010
Herkunft: Schweiz
Posts: 2613
      Zitat | Bearbeiten

Du kannst keine logik einbinden. Ausserdem fehlt am Schluss ein $ vom Regex. Und du solltest den längeren Regex immer am Anfang nehmen. Ansonsten trifft sowieso immer das erste zu.

 Code 
1:
2:
3:
RewriteRule ^(.*)/(.*)/(.*)$ index.php?art=$1&id=$2&option=$3
RewriteRule ^(.*)/(.*)$ index.php?art=$1&id=$2
RewriteRule ^(.*)$ index.php?art=$1



27.12.2013, 07:22 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Das mit dem $ am Ende wusste ich nicht.

Wenn ich das so Ordne wie du es gesagt hast, dann wird immer das Letzte verwendet.

Wie kann man es denn Realisieren?

Oder ist es unmöglich?


27.12.2013, 07:46 Profil | PM | E-Mail  
TBT
Mitglied
Neuling


Dabei seit: 10.12.2013
Herkunft: keine Angabe
Posts: 4
      Zitat | Bearbeiten

Die oben angegebenen Regeln verzichten auf das / am Ende, daher matcht die letzte Regel.
Das / kannst du aber "bei Bedarf" - "/?" mit einbauen.

Außerdem solltest du sicherstellen, das die Regeln nicht auf domain.tld//bla/ matchen,
indem du * (0 oder mehrere) durch + (1 oder mehrere) tauschst

Mit der Angabe [L] kannst du bestimmen, dass er nach matchen dieser Regel aufhören soll

 Code 
1:
2:
3:
RewriteRule ^(.+)/(.+)/(.+)/?$ index.php?art=$1&id=$2&option=$3 [L]
RewriteRule ^(.+)/(.+)/?$ index.php?art=$1&id=$2 [L]
RewriteRule ^(.+)/?$ index.php?art=$1 [L]
PS: Regeln nicht live getestet




Post wurde schon 1x editiert, das letzte mal am 27.12.2013 um 21:33 von TBT
27.12.2013, 21:32 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Hey TBT,
wenn ich das von dir gepostete einfüge gibt mir die Variable $_GET folgendes zurück:
Array ( [art] => index.php )




27.12.2013, 22:05 Profil | PM | E-Mail  
TBT
Mitglied
Neuling


Dabei seit: 10.12.2013
Herkunft: keine Angabe
Posts: 4
      Zitat | Bearbeiten

du rufst aber auch das von dir abgegebene domain.de/art/id/ und nicht domain.de/index.php/art/id auf, oder?


28.12.2013, 00:19 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Okey, ich glaube das Problem ist dieses "?"

 PHP 
1:
2:
3:
4:

RewriteRule ^(.+)/?$ index.php?art=$1 [L]

RewriteRule ^(.+)/$ index.php?art=$1 [L]


Denn ohne funktioniert es


Noch eine kleine Frage, wenn ich das so eingebe:

domain.de/feed

dann bekomme ich eine 404 Fehlerseite, kann ich ihn dann irgend wie trotzdem zu der Seite weiter führen lassen?

Also das die Seite die aufgerufen werden sollte trotzdem geladen wird?


28.12.2013, 00:23 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Okey, habe den folgenden Befehl gefunden,
könnte man den zu modifizieren das aus folgender Url
domain.de/feed
diese url wird?
domain.de/feed/

 PHP 
1:
ErrorDocument 404 http:



28.12.2013, 00:40 Profil | PM | E-Mail  
FalkenaugeMihawk
Mitglied
Perfekter User


Dabei seit: 05.06.2010
Herkunft: Schweiz
Posts: 2613
      Zitat | Bearbeiten

Nein. ErrorDocument ist einfach nur dazu da, Apache zu sagen, welche Datei Apache bei einem Fehler (z.B. 404) verwenden soll oder welche Ausgabe es tätigen soll.

Für das was du willst musst du selber direkt die URL umschreiben.


28.12.2013, 02:08 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Okey, Danke.

Ich hatte die Idee das ich z.B. eine PHP Datei anlege auf die der Error 404 zugreift und durch folgenden PHP Befehl eine Weiterleitung mache, so das die Url richtig angezeigt wird.

 PHP 
1:
2:
header("Location: /bla.php";
exit();



Ich habe jedoch eine Lösung gefunden, nur funktioniert sie noch nicht ganz so richtig.
Folgendes steht jetz in meiner Datei.

 PHP 
1:
2:
3:
4:
5:
6:
7:
RewriteRule ^(.+)/(.+)/(.+)/$ index.php?art=$1&id=$2&option=$3 [L]
RewriteRule ^(.+)/(.+)/(.+)$ index.php?art=$1&id=$2&option=$3 [L]

RewriteRule ^(.+)/(.+)/$ index.php?art=$1&id=$2 [L]
RewriteRule ^(.+)/(.+)$ index.php?art=$1&id=$2 [L]

RewriteRule ^(.+)/$ index.php?art=$1 [L]


Damit werden Seiten auch ohne hinten stehendes / richtig geladen, nur bei dem wo nur ART übergeben wird, da funktioniert das nicht.

Weiß jemand da Abhilfe?




Post wurde schon 1x editiert, das letzte mal am 28.12.2013 um 02:29 von PhylusAble
28.12.2013, 02:22 Profil | PM | E-Mail  
FalkenaugeMihawk
Mitglied
Perfekter User


Dabei seit: 05.06.2010
Herkunft: Schweiz
Posts: 2613
      Zitat | Bearbeiten

Warum schmeisst du nicht einfach alles in einen GET-Parameter und brichst dann nicht einfach mit PHP den Parameter in drei und fütterst dann so das Script? Ist auf jeden Fall einfacher.

.htaccess:
 Code 
1:
RewriteRule ^(.*)$ index.php?input=$1

index.php:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
$input 
explode("/"$_GET['input']);
$art $input[0];

if(!empty(
$input[1])) {
    
$id $input[1];
}

if(!empty(
$input[2])) {
    
$option $input[2];
}



28.12.2013, 03:22 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

Das ist eben das Problem, wenn ich das so mache:

 PHP 
1:
RewriteRule ^(.*)$ index.php?input=$1


dann funktioniert die Übergabe nicht, es geht nur so:

 PHP 
1:
RewriteRule ^(.*)/$ index.php?input=$1


es verlangt das / außer es sind mehrere Parameter.


28.12.2013, 03:33 Profil | PM | E-Mail  
PhylusAble
Mitglied
Anfänger


Dabei seit: 07.12.2012
Herkunft:
Posts: 63
      Zitat | Bearbeiten

So, seit gestern ausem Urlaub zurück.

Habe mir jetzt überlegt das Problem via PHP zu lösen.

Überprüfen ob / am ende ist, wenn nicht dann neu laden via PHP und gut ist.

 PHP 
1:
2:
header("Location: link";
exit();


Danke noch mals für eure Hilfe.

Ein gutes Neues allerseits.


05.01.2014, 18:50 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » Sonstige Sprachen » .htaccess und if else?   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz