mod_rewrite Problem mit Slashes
Jeena Paradies
- webserver
Hallo,
Ich weiß es sieht aus wie ein Doppelposting, aber es ist keines. Mein letztes Posting ist mittlerweile im Archiv gelandet, und ich habe neue Erkenntnisse, mit hilfe deren es uns villeicht gelingt das Problem zu lösen.
Noch einmal zur Erinnerung was ich machen will:
Ich habe ein Script auf meinem Testsystem welches eine Variable erwartet:
http://localhost/open/Webs/jeenas-home5/artikel/artikel.php?artikel=test
Nun will ich dass es per mod_rewrite umgeschrieben wird in:
http://localhost/open/Webs/jeenas-home5/artikel/test/
so weit so gut, funktioniert alles mit dieser http://localhost/open/Webs/jeenas-home5/artikel/.htaccess
---------------------------
RewriteEngine on
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !-d
RewriteRule (.*) http://localhost/open/Webs/jeenas-home5/artikel/$1/ [R=301,L]
RewriteRule "^([a-zA-Z0-9-_]+)/" ./artikel.php?artikel=$1
---------------------------
Probleme gibt es wenn ich aber
http://localhost/open/Webs/jeenas-home5/artikel
(ohne Slash dahinter) aufrufe. Dann wird es umgeschrieben in
http://localhost/open/Webs/jeenas-home5/artikel//var/www/open/Webs/jeenas-home5/artikel/
welches natürlich nicht existiert und somit eine 404 verursacht.
Hat jemand irgendeine Idee wie man das verhinder könnte? Wenn ein Slash da ist dann funktioniert es ja auch wunderbar, aber es soll ja auch funktionieren wenn keiner da ist.
Grüße
Jeena Paradies
Hallo Jeena,
RewriteEngine on
If the URL does not end with a slash
RewriteCond %{REQUEST_URI} !/$
and the URL does not contain a full stop (Example: index.html)
RewriteCond %{REQUEST_URI} !.
and is not a directory
RewriteCond %{REQUEST_URI} !-d
rewrite it so that it ends with a slash
RewriteRule (.*) http://localhost/open/Webs/jeenas-home5/artikel/$1/ [R=301,L]
RewriteRule "^([a-zA-Z0-9-_]+)/" ./artikel.php?artikel=$1
autsch - das ist aber lang ;-) ich habe demnächst mal vergleichbares vor, also kupfer ich mir doch mal eine Lösungsmöglichkeit ab ;-)
Also, hast du im Verzeichnis /artike/ noch was anders drinn? Ich würde nämlich einfach volgendes in deiner htaccess vorschlagen:
Ach so, nee vorher: Deine htaccess ist doch im Verzeichnis /open/Webs/jeenas-home5/artikel/, nicht wahr? Ok, also:
# Basis deines Webprojekts wird ja .../jeenas-home5/ sein, oder?
RewriteEngine On
RewriteBase /artikel/
RewriteRule ^([a-zA-Z0-9-_]+)(?!.php)$ "artikel.php?artikel=$1"
Hmm, müsste eigentlich alles treffen, nur keine .php-Datei...
naja, vielleicht hilft's :)
WauWau
Hallo,
autsch - das ist aber lang ;-)
Es wird noch länger ;)
Also, hast du im Verzeichnis /artike/ noch was anders drinn? Ich würde nämlich einfach volgendes in deiner htaccess vorschlagen:
Nun da ist halt noch index.php drin.
# Basis deines Webprojekts wird ja .../jeenas-home5/ sein, oder?
Ja.
RewriteEngine On
RewriteBase /artikel/
RewriteRule ^([a-zA-Z0-9-_]+)(?!.php)$ "artikel.php?artikel=$1"
Produziert bei mir einen 500er. Hab aber nicht in die Log geschaut warum, algube aber dass es sich immer wieder selbst rewritet wegen (?!.php). Muss das nicht in die RewriteCond?
Außerdem war mir ja vor allem wichtig dass die Slashes angehängt werden wenn sie jemand vergessen hat, da sonst der Browser denkt dass er in einem falschen Verzeichniss ist und es wirk kein CSS und keine Bilder die relativ angegeben sind angezeigt.
Aber ich "König Jeena mod_rewrite der II" habe es nun nach Zwei Wochen mit 4-5 Std. / Tag am Problem arbeiten doch GESCHAFFT!!!
So sieht mein Meisterwerk aus:
--------------
RewriteEngine on
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !artikel$
RewriteRule (.*) http://localhost/open/Webs/jeenas-home5/artikel/$1/ [R=301,L]
RewriteRule "^([a-zA-Z0-9-_]+)/" ./artikel.php?artikel=$1
--------------
Jetzt dürft ihr Stolz auf mich sein, denn ich habe es endlich so hinbekommen wie ich es wollte! Jetzt muss ich beim Portieren auf mein richtiges System nur noch eine Datei verändern. Fragt mich aber nicht warum die RewriteRules nicht mit meinem vHost funktionieren wollten.
Jetzt kann ich endlich an meiner neuen coolen Seite weiterbasteln :-)
BTW: Wenn ihr mich jetzt sehen könntet... Ich kriege das blöde Grinsen gar nicht mehr aus dem Gesicht ;)
Grüße an alle, die Welt ist doch wunderbar!
Jeena Paradies
Hallo Jeena,
Aber ich "König Jeena mod_rewrite der II" habe es nun nach Zwei Wochen mit 4-5 Std. / Tag am Problem arbeiten doch GESCHAFFT!!!
"König Jeena mod_rewrite der II"... *g* ;-)...
RewriteEngine on
If the URL does not end with a slash
RewriteCond %{REQUEST_URI} !/$
and the URL does not contain a full stop (Example: index.html)
RewriteCond %{REQUEST_URI} !.
and it is not /artikel/
RewriteCond %{REQUEST_URI} !artikel$
rewrite it so that it ends with a slash
RewriteRule (.*) http://localhost/open/Webs/jeenas-home5/artikel/$1/ [R=301,L]
RewriteRule "^([a-zA-Z0-9-_]+)/" ./artikel.php?artikel=$1
bin total begeistert... wieso ist das sooo lang?
z.B. meine Rule, die imho schon wesentlich mehr bewerkstelligen muss (oder?):
RewriteEngine On
RewriteBase /news
RewriteRule ^archiv(?:/?|/(\d{4})(?:/?|/(\d{1,2}|[^/]{3,10})(?:/?|/[^\d]*(\d+)[^\d]*)))$ "view_archiv.php?year=$1&month=$2&news=$3"
Wieso benötige ich keine RewriteCond's? Weil bei mir das dann letztenendes das Script erledigt...
BTW: Wenn ihr mich jetzt sehen könntet... Ich kriege das blöde Grinsen gar nicht mehr aus dem Gesicht ;)
etwa so:
<img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
*scnr*
WauWau
Hallo.
Aber ich "König Jeena mod_rewrite der II"
... "und Sissi die Zweite" ;-)
MfG, at