Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[gelöst] mod rewrite von domain.de/category zu domain.de/index.php?cat=category [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[gelöst] mod rewrite von domain.de/category zu domain.de/index.php?cat=category


 
einermeiner
26-10-2009, 18:53 
 
Hi Leute,

ich will mit .htaccess und mod rewrite meine urls umändern.

Mit


RewriteEngine on
RewriteRule ^(.*).html$ index.php?cat=$1
kann ich von domain.de/category.html nach domain.de/index.php?cat=category springen.

Ich würde aber gerne mit domain.de/category nach domain.de/index.php?cat=category springen, also ohne das .html

Mit


RewriteEngine on
RewriteRule ^(.*)$ index.php?cat=$1
funktioniert es leider nicht.

Weiß jemand wie das funktioniert?

Gruß

 
AmicaNoctis
26-10-2009, 20:10 
 
Hallo,

ich weiß zwar nicht, ob es daran liegt, aber da ist ein Leerzeichen am Anfang der Zeile. Außerdem musst du beachten, dass du nur LF-Zeilenumbrüche benutzt und nicht die Windows-CRLF-Variante.

Gruß,

Amica

 
einermeiner
26-10-2009, 20:26 
 
An der Leerzeile am Anfang liegt es nicht, aber was sind LF-Zeilenumbrüche oder die Windows-CRLF-Variante?

Woran kann es noch liegen?

Gruß

 
TobiaZ
26-10-2009, 20:42 
 
ich will mit .htaccess und mod rewrite meine urls umändern.Hat ja nichts mit PHP zu tun... *move*

 
Kropff
26-10-2009, 21:02 
 
Hat ja nichts mit PHP zu tun... *move*
Wohin? :confused: :confused: :confused:

Peter

 
AmicaNoctis
26-10-2009, 21:14 
 
Hallo Peter,

passt Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) - PHP script resource (http://www.php-resource.de/forum/fragen-zu-installation-konfiguration-lamp-wamp-co/) nicht am besten?

Gruß,

Amica

 
Kropff
26-10-2009, 21:18 
 
passt Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) - PHP script resource (http://www.php-resource.de/forum/fragen-zu-installation-konfiguration-lamp-wamp-co/) nicht am besten?
Ja, und warum hat er es nicht verschoben? Ich glaube, TobiaZ wird alt. :D Und * verschieb *.

Peter

 
AmicaNoctis
26-10-2009, 21:20 
 
Achsoooo, jetzt hab ich verstanden. Du hast gar nicht wirklich gefragt, wo sie hin soll :goth:

 
einermeiner
26-10-2009, 21:29 
 
Ähmm sorry, aber zurück zum Thema, hat da jemand ne Lösung für?

Gruß

 
AmicaNoctis
26-10-2009, 21:32 
 
Hast du einen HEX-Editor oder den Total Commander oder Notepad++ oder Textpad? Damit kannst du dir anzeigen lassen, ob die Zeilenumbrüche im Windows- oder im UNIX-Format drin stehen. Apache mag Windows-Zeilenumbrüche (CRLF = \r\n = 0d 0a) nicht und spielt nur bei UNIX-Zeilenumbrüche (LF = \n = 0a) mit.

 
einermeiner
26-10-2009, 21:36 
 
Ich nutze PSPad und hab die UNIX Einstellung gefunden, funktioniert aber trotzdem nicht.

Kann es irgendwie daran liegen, dass er das vielleicht als Verzeichnis ansieht wenn ich ihm keine Dateiendung mitgebe? Kann man da irgendwas drehen?

Gruß

 
AmicaNoctis
26-10-2009, 21:40 
 
Nein, daran kann es nicht liegen. Lädst du bitte mal die Datei als Anhang hoch?

 
einermeiner
26-10-2009, 22:01 
 
Ok hier die Datei im Anhang.
Musste sie allerdings in .txt umbenennen, da ich sie sonst nicht hätte anhängen können.

Gruß

 
AmicaNoctis
26-10-2009, 22:06 
 
Ok, die ist korrekt. Dann frag ich jetzt mal nach der Fehlermeldung, die du bekommst (was ich hätte schon viel früher machen sollen): Welche Fehlermeldung bekommst du?

 
einermeiner
26-10-2009, 22:14 
 
404 not found

Gruß

 
AmicaNoctis
26-10-2009, 22:17 
 
An der .htaccess liegt es definitiv nicht. Erstell doch mal bitte eine index.php ;)

 
einermeiner
26-10-2009, 22:46 
 
Ok, also ich habe jetzt eine index.php und die .htaccess

.htaccess

RewriteEngine On
RewriteRule ^(.*)$ index.php?cat=$1


index.php

<?php
echo "index cat: ".$_GET['cat'];
?>



Wenn ich jetzt domain.de/blub aufrufe bekomme ich folgende ausgabe:


index cat: index.php


Das würde heißen, dass die .htaccess an index.php?cat=index.php weiterleitet.
Eigentlich sollte es


index cat: blub


ausgeben.


Woran liegt das?

Gruß

 
AmicaNoctis
26-10-2009, 23:01 
 
Dann hast du die max-redirects-Direktive (oder so ähnlich) nicht gesetzt, bzw. nicht auf 1, wie bei mir zum Beispiel.

Dann ändere die .htaccess mal auf

RewriteEngine on
RewriteRule !^index\.php - [C]
RewriteRule ^(.*)$ index.php?cat=$1 [L]

 
einermeiner
26-10-2009, 23:16 
 
Ja wunderbar so funktioniert es, aber was genau ist diese max-redirects-Direktive?
Oder genauer gesagt was bewirkt

RewriteRule !^index\.php - [C]


?

Gruß

 
AmicaNoctis
27-10-2009, 01:27 
 
Das darfst du jetzt aber selbst mal nachlesen, wenn es dich interessiert. :rtfm:

was genau ist diese max-redirects-Direktive?

mod_rewrite - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteoptions)

RewriteRule !^index\.php - [C]
?

mod_rewrite - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule)

 
einermeiner
27-10-2009, 11:12 
 
Hab ich natürlich schon, aber ich habs nicht verstanden.
Für mich würde die Zeile bedeuten: "Die nächste Zeile wird nur ausgeführt wenn index.php nicht existiert", aber das is total unlogisch.

Wo liegt da mein Denkfehler?

Und noch was:
Die Variante funktioniert ja einwandfrei, nur tritt jetzt ein neues Problem auf. Wenn ich das auf einer Website versuche, funktionieren keine CSS Styles, JS und Bilder mehr. Also keine über

<link rel="stylesheet" href="/screen.css" type="text/css" />Ich nehme an die werden auch nach index.php?cat=/screen.css weitergeleitet.

Kann ich dem .htaccess mitgeben das er die ganze Weiterleitung bei .jpg, .css und .js auslässt?

Ich hab zwar das Manuel und ein paar Tutorials gelesen, aber irgendwie werde ich aus denen nicht schlau.

Gruß

 
wahsaga
27-10-2009, 11:12 
 
Mit
RewriteEngine on
RewriteRule ^(.*)$ index.php?cat=$1

funktioniert es leider nicht.
Natürlich nicht - denn dieses Muster trifft auch auf index.php zu, so dass du in einer Endlosschleife landest.

Du könntest bspw. keinen Punkt im Muster erlauben, wenn du diesen nicht brauchst; oder auch per RewriteCond physisch existierende Dateien/Verzeichnisse vom Rewriting ausschliessen.

 
einermeiner
27-10-2009, 11:29 
 
Natürlich nicht - denn dieses Muster trifft auch auf index.php zu, so dass du in einer Endlosschleife landest.


Das versteh ich nicht. Ich zerteil mal das ganze:

Also mit "RewriteEngine on" schalte ich das Modul an und ermögliche das Rewriting.

Mit "RewriteRule" erstelle ich eine neue Regel.

"^" bedeutet, am Anfang der Url
"(.*)" bedeutet kein oder mehrere Zeihen
Und mit "$" speichere ich das gesuchte in eine variable, in dem fall in $1
und dann leite ich das ganze einfach an index.php?cat=$i um

Wenn jemand domain.de/index.php aufrufen würde, müsste es mir "index cat = index.php" ausgeben.

Ich verstehe nicht wo da eine Endlosschleife entsteht.

Wenn jetzt domain.de/blub eingegeben wird müsste ich "index cat = blub" bekommen.

Mit "RewriteRule !^index\.php - [C]" funktioniert das auch, ich versteh nur nicht warum.

per RewriteCond physisch existierende Dateien/Verzeichnisse vom Rewriting ausschliessen.

Meinst du damit, das ich dann dort alle Dateien ablegen soll, die eingebunden werden, wie z.B. CSS und JS?

Gruß

 
onemorenerd
27-10-2009, 12:03 
 
Wenn jemand domain.de/index.php aufrufen würde, müsste es mir "index cat = index.php" ausgeben.

Ich verstehe nicht wo da eine Endlosschleife entsteht.
Wenn eine RewriteRule angewendet wird, entsteht dadurch ja eine neue URL. Mit dieser neuen URL beginnt der ganze Rewrite-Prozess von vorn. Weil du mit ^(.*)$ einfach alles matchst, wird immer wieder umgeschrieben, von vorn begonnen, gematcht, umgeschriebene, von vorn begonnen, ...

Meinst du damit, das ich dann dort alle Dateien ablegen soll, die eingebunden werden, wie z.B. CSS und JS?
Sollst du nicht. Lies mod_rewrite - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond)

 
einermeiner
27-10-2009, 12:31 
 
Ok also das mit der Endlosschleife habe ich verstanden.

Aber was meinst du mit:

Sollst du nicht. Lies mod_rewrite - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond)

Ich soll keine Verzeichnisse ausschließen, aber was sonst? Ich hab das bestimmt schon 3 - 4 mal gelesen, aber mir fehlt der Ansatz.

Gruß

 
AmicaNoctis
27-10-2009, 13:17 
 
Hallo nochmal,

alles, was du nicht "rewriten" willst, gibst du genau so an, wie auch die index.php ausgeschlossen wird:


RewriteEngine on
RewriteRule !^index\.php - [C]
RewriteRule !^style\.css - [C]
RewriteRule !^script\.js - [C]
RewriteRule !^(.+)\.pdf$ - [C]
RewriteRule !^img/ - [C]
RewriteRule !^download/ - [C]
RewriteRule ^(.*)$ index.php?cat=$1 [L]


Gruß,

Amica

 
einermeiner
27-10-2009, 13:43 
 
Toll da hät ich auch drauf kommen können :) Danke

So funktioniert es wenn ich ein css file so eingebunden habe:

echo "<link rel=\"stylesheet\" href=\"screen.css\" type=\"text/css\" />";

Aber nicht wenn ich es so eingebunden habe:

echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />";

Also sobald ich einen Slash / vor die screen.css Datei schreibe funktioniert es nicht mehr. Allerdings soll das auch funktionieren.

So habe ich es schon versucht, hat aber nicht geklappt:
RewriteEngine on
RewriteRule !^screen\.css - [C]
RewriteRule !^/screen\.css - [C]
RewriteRule !^index\.php - [C]
RewriteRule ^(.*)$ index.php?cat=$1 [L]

Gibt es eine Möglichkeit, dass es auch mit dem Slash funktioniert?

Gruß

 
TobiaZ
27-10-2009, 15:07 
 
alles, was du nicht "rewriten" willst, gibst du genau so an, wie auch die index.php ausgeschlossen wird: [...]

Dann muss er ja bei jeder neu erstellten Datei seine Regel anpassen...

 
AmicaNoctis
27-10-2009, 15:11 
 
Dann muss er ja bei jeder neu erstellten Datei seine Regel anpassen...

Muss er nicht. Das sollte erstens als Beispiel dienen und zweitens hab ich damit ja auch gezeigt, dass man ganze Verzeichnisse (z. B. img, download), Dateitypen (*.pdf) und auch einzelne Dateien ausschließen kann. Was war daran jetzt so furchtbar?

 
einermeiner
27-10-2009, 15:37 
 
Nene, das passt schon. Ich klammere alle .css, .js und .jpg Dateien aus.

So sieht die .htaccess Datei aus:

RewriteEngine on
RewriteRule !^(.*)\.css - [C]
RewriteRule !^(.*)\.js - [C]
RewriteRule !^(.*)\.jpg - [C]
RewriteRule !^index\.php - [C]
RewriteRule ^(.*)$ index.php?cat=$1 [L]Mein einziges Problem ist nur das das nicht reagiert wenn ich eine .css mit

echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />";einbinden will. Sobald ein / davor steht läuft das ganze nicht.

Habt ihr dafür eine Lösung? Ich find einfach keine.

Gruß

 
AmicaNoctis
27-10-2009, 15:41 
 
Mein einziges Problem ist nur das das nicht reagiert wenn ich eine .css mit

echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />";einbinden will. Sobald ein / davor steht läuft das ganze nicht.

Das wundert mich auch etwas. Wie lautet der Pfad der Datei, in der das eingebunden werden soll? Was passiert, wenn du im Browser direkt http://localhost/screen.css aufrufst? Funktioniert es, wenn du die .htaccess testweise mal abschaltest?

 
Scriptfarm
27-10-2009, 15:53 
 
Sicherlich ist das Apache Modul eine tolle Sache und bei machen Anwendungsgebieten bietet sich auch die URL Manipulation an.
Aber in diesem Fall würde ich lieber drauf verzichten, und mir lieber die Mühe machen und die Links direkt im Script umchreiben.

 
einermeiner
27-10-2009, 15:55 
 
Wie lautet der Pfad der Datei, in der das eingebunden werden soll?Die liegt direkt im Hauptordner.

Also in http://localhost/testsystem/index.php
Genauso wie die .htaccess und die screen.css

Was passiert, wenn du im Browser direkt http://localhost/screen.css aufrufst?Sie wird mir ganz normal angezeigt.

Funktioniert es, wenn du die .htaccess testweise mal abschaltest?

Ja, aber das bringt mir ja nichts.

Gruß

 
AmicaNoctis
27-10-2009, 16:00 
 
Die liegt direkt im Hauptordner.

Also in http://localhost/testsystem/index.php
Genauso wie die .htaccess und die screen.css

Das widerspricht sich aber. Wenn sie im Ordner testsystem liegt, kann sie nicht über http://localhost/screen.css ganz normal angezeigt werden. Hast du es mal mit /testsystem/screen.css probiert? Pfade mit / sind nämlich absolut.

 
einermeiner
27-10-2009, 16:10 
 
Ach du ***** klar, das läuft ja von dem root verzeichnis aus und nicht von dem in der die index.php und .htaccess Datei liegen.

Ok danke, so funktionierts.
Manchmal sieht man den Wald vor lauter Bäumen einfach nicht.

Ok in dem Fall is das glaub alles geklärt.
Nochmals danke für eure Hilfe (und Geduld :) )

Gruß

 
wahsaga
27-10-2009, 23:21 
 
Wenn eine RewriteRule angewendet wird, entsteht dadurch ja eine neue URL. Mit dieser neuen URL beginnt der ganze Rewrite-Prozess von vorn.
Genauer gesagt: Wenn man das Rewriting verzeichnisbasiert (in .htaccess) definiert.
Wenn die Regeln in der Serverkonfiguration stehen, dann beginnt nach dem Durchlauf aller Regeln kein "neuer Durchgang".
Das hat etwas damit zu tun, zu welchem Zeitpunkt des URL-Mapping-Prozesses das ganze jeweils ausgeführt wird.
(Weshalb man das ganze bei Sachen, wo höchste Performance gefragt ist, auch möglichst in der Serverkonfiguration macht. Bei Shared Hosting allerdings idR. nicht möglich.)


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:46 Uhr.