.htaccess - Schöne Urls
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuellen url
all
art
aufgerufen code
browser
code
datei
domain
eintreffen
erachten
erweiterung
http
image
index
problem
rest
server
stehen
tag
url
-
Htag/all">allo Leute,
ich habe ein Problem. Ich habe schon Gegoogelt was das Zeug hält aber leider bin ich daraus nicht schlau geworden.
Es geht darum ich möchte folgende Url:
www.domain.at/index.php?include=art
In diesen Url umwandeln:
www.domain.at/art
Das ganze habe ich schon hinbekommen:
RewriteEngine on RewriteBase /domain RewriteCond %{REQUEST_URI} !^/+(admin|images)/? RewriteCond %{REQUEST_URI} !(\..{2,4})$ RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^(.*)$ index.php?include=$1 [L]
Allerdings möchte ich jetzt noch weitere Variablen mitgeben:
www.domain.at/art/1
Wie löse ich das?
lg
grunt -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst die RewriteRule einfach erweitern.
(ungetestet)RewriteRule ^([^/]*)(/(.*))?$ index.php?include=$1&variable=$3 [L]
Ich hab das jetzt gleich optional gestaltet, dass du nicht unbedingt Variablen mitgeben musst. Versuch mal, ob das funktioniert, und auch was in der
steht, wenn du keine Variable mitgibst. Vermutlich wird es ein leerer String sein. Falls dich das stört, müsste ich was besseres zusammen bauen$_GET["variable"]
-
Super danke hat funktioniert!
Allerdings hab ich jetzt das Problem das die Links falsch gesetzt werden.
Das heißt ich rufe www.domain.at/picture/1 auf und dann haben alle Links immer www.domain.at/picture/art/ etc... somit wird auch keine CSS Datei geladen?
lg Fabi -
grunt schrieb:
Da hast du recht, für den Browser sieht es jetzt aus, als wären das Unterordner. Dementsprechend baut er auch die Links zusammen.
Allerdings hab ich jetzt das Problem das die Links falsch gesetzt werden.
Du musst also mit den üblichen Techniken etwas nachhelfen.
a) Mit
zurück gehen:..
<a href="../anderesPicture/2">weiter</a>
b) Absoluten Pfad von der Domain weg: (indem man mit / beginnt)<a href="/anderesPicture/2">weiter</a>
Das waren jetzt Html-Links, gilt natürlich auch für Bilder, Css, Javascript usw. -
Ich kann leider die Links nicht zurück gehen lassen mit ".."
Den dann habe ich das Problem das die Links nicht mehr bei den anderen Seiten passen die ich z.B. mit
aufrufe.www.domain.at/art
-
Auch auf die Reihenfolgen in der htaccess Datei geachtet?
Ich habe mir es wesentlich einfacher gemacht.
In der htaccess habe ich nur folgendes drin stehen:
RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^.*$ ./index.php
Den Rest werte ich mittels explode in der index.php aus. So ist man meines Erachtens etwas flexibler. -
all-in1 schrieb:
Auch auf die Reihenfolgen in der htaccess Datei geachtet?
Ich habe mir es wesentlich einfacher gemacht.
In der htaccess habe ich nur folgendes drin stehen:
RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^.*$ ./index.php
Den Rest werte ich mittels explode in der index.php aus. So ist man meines Erachtens etwas flexibler.
Also meine .htaccess Datei sieht folgender massen gerade aus:
RewriteEngine on RewriteBase /domain RewriteCond %{REQUEST_URI} !^/+(admin|images)/? RewriteCond %{REQUEST_URI} !(\..{2,4})$ RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^([^/]*)(/(.*))?$ index.php?include=$1&item=$3 [L]
Habe auch dein Beispiel probiert aber da bekomme ich leider auch das Problem mit den Links.. und somit lädt es mir keine .css, .js Dateien etc... -
Dann musst du für jeden Fall der eintreffen kann eine Rewrite Rule aufstellen.
Oder wenn du meinen Fall nimmst, dann die Links zu den CSS und JS Dateien entsprechend ändern. Hatte anfangs auch Probleme, aber nun läuft alles. Zusehen unter http://webmeteor24.de
Kann mich nun um meine ganzen Erweiterungen kümmern, damit ich das CMS dann auch endlich raus bringen kann. -
Falls es jemanden interessiert so habe ich mein Problem gelöst.
Hab mir einfach eine function geschrieben die mir den aktuellen Url ausliest + dem Folder wo die Website liegt. Folder ist eigentlich nicht relevant nur in meinem Fall den ich habe mehrer Websiten auf meinem Testserver.
function getUrl(){ $server = $_SERVER['SERVER_NAME']; $folder = $_SERVER['REQUEST_URI']; $folder = explode("/", $folder); //Hier ändern wenn sich die Website nicht in einem Unterordner befindet return "http://" .$server ."/". $folder[1]; }
function wird so aufgerufen:
<?php echo getUrl(); ?>
-
Du kannst es über HTML ganz leicht haben.
Siehe den <BASE>-Tag.
<base href="http://www.meineSeite.de/unterordner-mit-den-dateien" />
Das versteht quasi jeder Browser, ist keiner von den "neuen" (html5) Tags.
So wird jeder Link der ohne eigene URL vorher auf der Seite auftaucht, mit dem Link oben "gestartet".
Jetzt nochmal auf Deutsch:
Du hast deine Dateien in "http://meineseite.de/css/", benutzt aber nun den <BASE>-Tag,
jetzt taucht ein Link auf deiner Seite auf der das Stylesheet "mysuperawesomewebsite.css" lädt, jedoch ist im Browser die Seite über die "schöne URL" aufgerufen worden. Das macht aber nun nichts mehr, da die o.g. Datei nun von http://meineseite.de/css/mysuperawesomewebsite.css geladen wird.
Jedoch vorsicht! Es werden meines Wissens nach ALLE Links die nicht mit einer Internetadresse ausgestattet sind (bswp. /img statt http://meineseite.de/img) umgeschrieben, also auch Links über den <a>-Tag
Hoffe ich konnte helfen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage