ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
675
675
EMPFEHLEN
-
Hi Leute,
ich will meine LInkstruktur umbauen. Dazu habe ich folgenden Ansatz aufgearbeitet:
Hierzu meine .htaccessPHP-Code://VARS
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$pfadangabe = $path_parts['dirname']."/".$path_parts['filename'];
//LINK
<a href=\"".htmlspecialchars($pfadangabe"/".$var1."/".$var2."/".$var3)";
Code :1
RewriteRule ^unterseite/(.*)/(.*)/(.*).html$ /unterseite.html?param1=$1t¶m2=$2¶m3=$3 [QSA]
Dabei entstehen folgende 2 Probleme:
1. Problem
Die URL wird wie folgt ohne DOMAIN.DE angezeigt
Ich schließe daraus, dass irgendwo hier der Fehler liegen muss:Code :1
http://unterseite/$var1//$var3.html
2. ProblemPHP-Code:$path_parts = pathinfo($_SERVER['PHP_SELF']);
$pfadangabe = $path_parts['dirname']."/".$path_parts['filename'];//=>HIER MUSS DER FEHLER LIEGEN
Wenn eine $var nicht gegeben ist, dann entstehen in der URL doppelslashes wie z. B.:
Code :1
unterseite/$var1//$var3.html)
Dieses Problem habe ich mittels If-Anweisung lösen können. Also so in etwa:
So verschwinden jetzt wenigstens die Doppelslashes...PHP-Code:$slashes_1 ="/";
$slashes_2 = "/";
if ( $var1=='' ) $slashes_1='';
if ( $var2=='' ) $slashes_2='';
Aber meine Frage an der Stelle lautet, ob das rein technisch überhaupt der richtige Ansatz ist****?
FAZIT:
Ich bin mir Sicher, dass der Schweinehund irgendwo in der .htaccess und in der Variable "$pfadangabe" zu finden ist...
Jemand ne Ahnung, der weiterhelfen kann****?
-
15.12.11 23:41 #2
Ich habe nicht richtig verstanden, was du überhaupt erreichen willst.
Ich kenn dieses Routing nur so, dass man eine index.php hat, auf die man alle Anfragen umleitet und den eigentlich eingegebenen Pfad als query-string übergibt. So deutet deine .htaccess das ja auch an.
Diese zentrale index.php interpretiert den query-string und included dann vereinfacht gesagt die gewünschte Unterseite.
Bitte erkläre doch nochmal genauer, was du vor hast. Ich kann auch nicht genau erkennen, in welchem kontext dein Code steht.
Aber wenn ich dich zumindest soweit richtig verstanden habe, dann ist mir dein Einsatz von pathinfo() nicht klar. pathinfo zerlegt einen String in bestimmte einzelne Teile.
Und zwar Ordner-Pfandangaben und nicht URLs.
Wenn Du eine URL in einzelne Teile zerlegen möchtest, würde ich parse_url empfehlen.
Außerdem von php.net:
Dass also die Domain mit Suffix nicht in der $pfadangabe drin ist, hat also IMHO drei Gründe:$_SERVER['PHP_SELF']
Der Dateiname des aktuell ausgeführten Skripts, relativ zum Document Root. Beispielsweise enthält $_SERVER['PHP_SELF'] in einem Skript, das über die Adresse http://example.com/test.php/foo.bar aufgerufen wird, den Wert /test.php/foo.bar/.- $_SERVER['PHP_SELF'] enthält diese Angabe schon nicht
- pathinfo ist für Ordner-Pfade und nicht für URLs gedacht
- Selbst wenn, bei der Zusammensetzung der $pfadangabe würde dieser Teil eh nicht berücksichtigt
-
Hey...Du hast mich genau richtig verstanden. Die Variante mit der index.php ist genau die, welche ich will. Ich poste gleich mehr Code für den Überblick...
-
Hier mal der Code bis zur Abfrage****?
Und hier der Link.PHP-Code:if(isset($_GET['param1'])){
$params = explode("_", $_GET['param1']);
$param1 = $params[0];
if($params[1] != "" && $params[1] != "asc" && $params[1] != "desc"){
$param4 = $params[1];
}
if($params[1] == "asc" || $params[2] == "asc"){
// Ascending
} else {
// Descending
}
}
$var1 = (empty($var1) AND isset($param1)) ? trim($param1) : 'Wert,Wert,Wert...';
$var2 = (empty($var2) AND isset($_GET['param2'])) ? trim($_GET['param2']) : '';
$var1 = (isset($_POST['param1']) AND $_POST['param1'] != 'irgendwas') ? trim($_POST['param1']) : $var1;
$var2 = isset($_POST['param2']) ? trim($_POST['param2']) : $var2;
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$var3 = $path_parts['dirname']."/".$path_parts['filename'];
//ABFRAGE...SELECT...etc.
Ich würde gerne wissen wie ich es zustande bringen kann, dass alle Anfragen auf die index.php umgeleitet werden...Handelt es sich hierbei um einen 301er in der .htaccess****?...ich glaube mal nicht oder?PHP-Code:$var15 = "<a href=\"".htmlspecialchars($pfadangabe."./".$VAR1."/".$VAR2."/".$VAR3).";
if(isset($_GET['param4'])) $var15 .= "_".$_GET["param4"];
if(isset($_GET['param5'])) $var15 .= "_asc";
elseif(isset($_GET['param6'])) $var15 .="_desc";
$var15 .= ".html\" title=\"Vor\"><font class=\"no_bg\"> »»</font></a> \n";
$var10[] = $var15;
-
Hi,
das "Umleiten" geschieht über mod_rewrite (im Apache).
Code :1 2 3 4 5 6 7 8 9 10 11 12
RewriteEngine On # Bedingung: Die angeforderte Datei befindet sich im Dateisystem: RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d # Wenn Bedingung erfüllt, dann nicht umschreiben und Datei ausliefern. RewriteRule ^.*$ - [NC,L] # Wenn Bedingung nicht erfüllt, dann URL umschreiben und an die index.php übergeben. RewriteRule ^.*$ index.php [NC,L]
Gruß Kyoya StefanGeändert von Kyôya (16.12.11 um 00:24 Uhr)
Oracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
O. K....werd ich sofort ausprobieren
-
16.12.11 00:36 #7
Dann im Script bekommst du den Teil hinter der Domain mit Suffix wie folgt:
Und diesen String kann man dann auch mit pathinfo zerlegen, aber auch einfach mit explode, interpretieren und dementsprechende Dinge tun.PHP-Code:// http://www.blabla.de/unterseite/param1/param2
$querystring = $_SERVER['REQUEST_URI'];
echo $querystring; // gibt aus: "/unterseite/param1/param2"
Geändert von the snake II (16.12.11 um 00:52 Uhr)
-
.htaccess verwirrt mich ohne Ende
werd ich gleich mal umsetzen...Dann im Script bekommst du den Teil hinter der Domain mit Suffix wie folgt:
PHP-Code:
// http://www.blabla.de/unterseite/param1/param2
$querystring = $_SERVER['REQUEST_URI'];
echo $querystring; // gibt aus: "/unterseite/param1/param2"
Hey Leute...ich gebe Euch gleich einen Report...Langsam haut's hin aber noch nicht ganz...
Ich bekomm's nicht hin
So schaut jetzt meine .htaccess aus wie von Kyôya gepostet...Nochmals Danke an der Stelle:
Code :1 2 3 4 5 6 7 8 9 10
# Bedingung: Die angeforderte Datei befindet sich im Dateisystem: RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d # Wenn Bedingung erfüllt, dann nicht umschreiben und Datei ausliefern. RewriteRule ^.*$ - [NC,L] # Wenn Bedingung nicht erfüllt, dann URL umschreiben und an die index.php übergeben. RewriteRule ^.*$ index.php [NC,L]
meine index.php ist vorhanden aber eine Umleitung findet nicht statt, sobald ich den Link betätige. Ich werde das ganze jetzt nochmal von vorne durcharbeiten...ich hoffe ihr könnt mir weiterhelfen...wäre echt super von Euch...******
Leute, die Geschichte mit der index.php hab ich jetzt hinbekommen. Also bei jedem Klick auf den Link gelangt man nun zur index.php und alle Funktionen lassen sich dort einwandfrei ausführen. Das ganze hab ich jetzt ausschließlich mittels PHP realisiert und erstmal komplett auf .htaccess verzichtet...
Aber das ich nicht um die .htaccess herumkommen wenn ich die URL's in gewünschte Form bringen will, weiss ich selbst. Ich geh jetzt erstmal schlafen und melde mich dann wieder, wenn ich mit der .htaccess rummache...Aber erstmal vielen Dank an der Stelle für Eure Hilfe Jungs...Geändert von sheel (16.12.11 um 11:24 Uhr) Grund: Vierfachpost
-
In deiner .htaccess fehlt die Zeile
Code :1
RewriteEngine On
Oracle Certified MySQL 5 Professional Developer
Zend Certified PHP 5.3 Engineer
Vorträge, Webinare, etc im Mayflower - Blog
-
16.12.11 13:52 #10
Hier mal ein Ansatz, den ich gestern noch geschrieben habe:
Das ganze hat dann folgenden Effekt:PHP-Code:/***********/
/* Routing */
/***********/
$request = $_SERVER['REQUEST_URI'];
$request_parts = explode('/',$request);
//filter empty elements
$request_parts = array_filter($request_parts);
//reset keys
$request_parts = array_merge($request_parts);
$request_parts_count = count($request_parts);
$current_part = 0;
//Language - if it's not one of the languages
// defined in the $CONFIG->get('languages') array,
// redirect to this request with default language
$language_name = $CONFIG->get('defaultLanguage');
if($request_parts_count > $current_part && in_array($request_parts[$current_part],$CONFIG->get('languages'))){
$language_name = $request_parts[$current_part];
$current_part++;
}
else{
header('Location: '.$CONFIG->get('defaultLanguage').$request);
}
//Controller
$controller_name = $CONFIG->get('defaultController');
if($request_parts_count > $current_part){
$controller_name = $request_parts[$current_part];
$current_part++;
}
//Action
$action_name = $CONFIG->get('defaultAction');
if($request_parts_count > $current_part){
$action_name = $request_parts[$current_part];
$current_part++;
}
//Parameters
$parameters = array();
if($request_parts_count > $current_part){
$i=0;
foreach($request_parts as $part){
if($i<3){
$i++;
continue;
}else{
//Try to split the parameter
$param_parts = explode(':',$part);
if(count($param_parts) > 1)
$parameters[$param_parts[0]] = $param_parts[1];
else {
$parameters[] = $part;
}
}
}
}
Das ganze Arbeitet mit einem $CONFIG Objekt. Das müsste man dann entsprechend Anpassen.PHP-Code:// http://www.blabla.de/en/controller1/action1/parameter1/parameter2:wert2/parameter3
$language_name; //en
$controller_name; //controller1
$action_name; //action1
$parameter[0]; //parameter1
$parameter['parameter2']; //wert2
$parameter[2]; //parameter3
Dort sind z.B. default Controller und Actions definiert, Standardsprache etc.
Vielleicht hilft Dir das ja.
-
...hab ich in meiner .htaccess an erster Stelle stehen...Code :
1 2 3 4
In deiner .htaccess fehlt die Zeile Code : 1 RewriteEngine On
@SNAKE...fitte Sache Dein Ansatz...für mich aber noch etwas zu hoch...ich bin jetzt erstmal glücklich, dass alles bei der index.php landet, wenn Link betätigt.
Mein Problem liegt nur noch bei der .htaccess und dem Erscheinungsbild der URL. Ich habe nach wie vor den Code von Kyôya in meiner .htaccess stehen und so schaut der Link aus:
E D I T:Code :1
<a href="'.$pfadangabe.'?param1='.$var1.'¶m2='.$var2.'¶m3='.$var3;
$pfadangabe = Domain ohne .html
$link_string = enthält .html am Ende der URL
Leute...könnt Ihr mir Bitte posten wie dieser Link ausschauen soll, damit's mit der .htaccess hinhaut und ich Slashes als auch Bindestriche anstelle von Frage- und Istgleichzeichen habe...oder muss ich vorher noch den .hataccess-Code von Koya irgendwie bearbeiten...Das Prinzip für mod_rewrite habe ich bereits verstanden. Also an die index.php wird die echte URL übergeben welche mit einer festgesetzten Regel in der Adresszeile angezeigt wird...
...Jungs sorry für meine blöden Fragen...mir wird's langsam peinlich...schäm schäm...Geändert von ben78 (16.12.11 um 21:12 Uhr)
Ähnliche Themen
-
URI umschreiben mit str_replace
Von xtramen01 im Forum PHPAntworten: 2Letzter Beitrag: 21.06.09, 18:38 -
mod_rewrite - Subdomains "umschreiben"
Von DJLopez im Forum Hosting & WebserverAntworten: 0Letzter Beitrag: 18.10.07, 19:47 -
PHP in cgi umschreiben
Von dsaer im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 1Letzter Beitrag: 28.03.07, 08:46 -
swf namen umschreiben
Von Denniz im Forum Flash PlattformAntworten: 2Letzter Beitrag: 14.09.06, 13:08 -
Kompletten Domainnamen umschreiben mit mod_rewrite?
Von hudri im Forum Hosting & WebserverAntworten: 0Letzter Beitrag: 03.11.04, 11:55





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren