url rewriting / clean urls

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

url rewriting / clean urls

Post by dhm »

Habe eben mal mit einer Testinstallation bissl herumgespielt und dabei hats mir das Blog total zerschossen, drum frag ich nun lieber vorher (lite version hochladen dauert verdammt lange ... mehr als 20 Minuten)

Hauptanliegen

mod_rewrite ist aktiviert bei "Konfiguration" von s9y

Mein Blog wird so aufgerufen:
http://example.net/serendipity/

Wenn man einen Eintrag auswählt, dann sieht die url momentan so aus:
http://example.net/serendipity/archives ... ntrag.html

Und ich hätte sie gerne wie folgt:
http://example.net/serendipity/Testeintrag/

Falls das nicht gehen sollte, dann hätte ich gerne:
http://example.net/serendipity/kategorie/Testeintrag/

Also ohne dieses "archives" (wichtig!),
ohne diese Nummer und ohne .html.
Sollte doch eigentlich nicht zu Problemen führen, wenn ich niemals einen Artikel gleich nenne.

Ist das möglich?

Kleine Zusatfrage

In meiner eigenen .htaccess (liegt im root) habe ich folgendes drin stehen:

Code: Select all

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://example.net/$1 [R=301,L]
Damit wird "www.example.net" in "example.net" verändert.
Nun wirkt das aber nicht mehr auf den Ordner "serendipity", vermutlich weil der Ordner ja eine eigene .htaccess hat, nicht wahr?
Ich kenne mich damit nicht aus ... kann ich diesen Codeschnipsel von oben einfach der .htaccess hinzufügen? Egal wo?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: url rewriting / clean urls

Post by garvinhicking »

Hi!
dhm wrote:(lite version hochladen dauert verdammt lange ... mehr als 20 Minuten)
Tipp: Probier mal nen FTP Client mit Threading. Ein Upload mit 3-4 Threads verkürzt die upload zeit auf 5 Minuten :)
Und ich hätte sie gerne wie folgt:
http://example.net/serendipity/Testeintrag/
Das geht leider nicht. Ein Ordner wie "archives" (egal wie er heißt) wird immer benötigt.
Falls das nicht gehen sollte, dann hätte ich gerne:
http://example.net/serendipity/kategorie/Testeintrag/
Auch das geht nicht, Du brauchst immer einen fixen Unterordner.

Du könntest es evtl. mit ganz eigenen RewriteRules hinkriegen, aber sonst hat Serendipity wenig Chance deine Haupt-Eintrag Rules von anderen zu unterscheiden.

Wenn Du z.B. die URLs

example.net/Kategorien/Vernunft/

nutzt um die Kategorie "Vernunft" aufzurufen, woher soll ein System wissen dass das jetzt eine Kategorie ist, und nicht ein Artikel namens "Kategorien"?

Genau dafür braucht man einen festen Präfix.
Damit wird "www.example.net" in "example.net" verändert.
Nun wirkt das aber nicht mehr auf den Ordner "serendipity", vermutlich weil der Ordner ja eine eigene .htaccess hat, nicht wahr?
Korrekt. Du kannst den Codeschnippsel in die .htaccess einfügen. Am besten ganz ans Ende, nach dem "END S9Y".

Regards,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Re: url rewriting / clean urls

Post by dhm »

garvinhicking wrote: Korrekt. Du kannst den Codeschnippsel in die .htaccess einfügen. Am besten ganz ans Ende, nach dem "END S9Y".
Hm, das hat so nicht geklappt.
Da wurde dann immer meine Startseite (example.net) aufgerufen,
auch wenn ich example.net/serendipity eingegeben habe.

Kanns sein, dass man da was mit RewriteEngine On verändern muss?
Das steht ja auch in der von s9y angelegten .htaccess drinne.
Darf das nur einmal drin stehen?
garvinhicking wrote: Tipp: Probier mal nen FTP Client mit Threading. Ein Upload mit 3-4 Threads verkürzt die upload zeit auf 5 Minuten :)
Verwende FileZilla. Ist das "Use multiple connections to transfer files"? Habe das mal auf 4 gestellt.

Du könntest es evtl. mit ganz eigenen RewriteRules hinkriegen, aber sonst hat Serendipity wenig Chance deine Haupt-Eintrag Rules von anderen zu unterscheiden.
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: url rewriting / clean urls

Post by garvinhicking »

Hi!

Deine aktuelle .htaccess würde helfen :)
Darf das nur einmal drin stehen?
Das darf mehrfach vorkommen, ist egal.
Verwende FileZilla. Ist das "Use multiple connections to transfer files"? Habe das mal auf 4 gestellt.
Ich denke das könnte es sein; bei SmartFTP heißt es "Threads"...

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Re: url rewriting / clean urls

Post by dhm »

garvinhicking wrote: Deine aktuelle .htaccess würde helfen :)
Im Root liegt eine .htaccess mit dem Inhalt:

Code: Select all

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://example.net/$1 [R=301,L]
Im s9y-Verzeichnis halt die Serendipity-htaccess:

Code: Select all

# BEGIN s9y
ErrorDocument 404 /serendipity/index.php
DirectoryIndex /serendipity/index.php
php_value session.use_trans_sid 0
php_value register_globals off

RewriteEngine On
RewriteBase /serendipity/
RewriteRule ^(archives/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.html) index.php?/$1 [NC,L,QSA]
RewriteRule ^(authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^archives([/A-Za-z0-9]+)\.html index.php?url=/archives/$1.html [NC,L,QSA]
RewriteRule ^([0-9]+)[_\-][0-9a-z_\-]*\.html index.php?url=$1-article.html [L,NC,QSA]
RewriteRule ^feeds/(.*) index.php?url=/feeds/$1 [L,QSA]
RewriteRule ^unsubscribe/(.*)/([0-9]+) index.php?url=/unsubscribe/$1/$2 [L,QSA]
RewriteRule ^approve/(.*)/(.*)/([0-9]+) index.php?url=approve/$1/$2/$3 [L,QSA]
RewriteRule ^delete/(.*)/(.*)/([0-9]+) index.php?url=delete/$1/$2/$3 [L,QSA]
RewriteRule ^(admin|entries)(/.+)? index.php?url=admin/ [L,QSA]
RewriteRule ^archive/? index.php?url=/archive [L,QSA]
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml) rss.php?file=$1&ext=$2
RewriteRule ^(plugin|plugin)/(.*) index.php?url=$1/$2 [L,QSA]
RewriteRule ^search/(.*) index.php?url=/search/$1 [L,QSA]
RewriteRule ^comments/(.*) index.php?url=/comments/$1 [L,QSA]
RewriteRule ^(serendipity\.css|serendipity_admin\.css) index.php?url=/$1 [L,QSA]
RewriteRule ^index\.(html?|php.+) index.php?url=index.html [L,QSA]
RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA]
RewriteRule (.*\.html?) index.php?url=/$1 [L,QSA]

<Files *.tpl.php>
    deny from all
</Files>

<Files *.tpl>
    deny from all
</Files>

<Files *.sql>
    deny from all
</Files>

<Files *.inc.php>
    deny from all
</Files>

<Files *.db>
    deny from all
</Files>

# END s9y
Hatte die 3 Zeilen von der htaccess aus dem Root einfach nach # END s9y reinkopiert.
Wie gesagt, ich kenne mich damt 0 (in Worten: null) aus ;)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: url rewriting / clean urls

Post by garvinhicking »

Hi!

Probier's mal mit folgender .htaccess:

Code: Select all

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://example.net/$1 [R=301,L]

# BEGIN s9y
ErrorDocument 404 /serendipity/index.php
DirectoryIndex /serendipity/index.php
php_value session.use_trans_sid 0
php_value register_globals off

RewriteEngine On
RewriteBase /serendipity/
RewriteRule ^(archives/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.html) index.php?/$1 [NC,L,QSA]
RewriteRule ^(authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^archives([/A-Za-z0-9]+)\.html index.php?url=/archives/$1.html [NC,L,QSA]
RewriteRule ^([0-9]+)[_\-][0-9a-z_\-]*\.html index.php?url=$1-article.html [L,NC,QSA]
RewriteRule ^feeds/(.*) index.php?url=/feeds/$1 [L,QSA]
RewriteRule ^unsubscribe/(.*)/([0-9]+) index.php?url=/unsubscribe/$1/$2 [L,QSA]
RewriteRule ^approve/(.*)/(.*)/([0-9]+) index.php?url=approve/$1/$2/$3 [L,QSA]
RewriteRule ^delete/(.*)/(.*)/([0-9]+) index.php?url=delete/$1/$2/$3 [L,QSA]
RewriteRule ^(admin|entries)(/.+)? index.php?url=admin/ [L,QSA]
RewriteRule ^archive/? index.php?url=/archive [L,QSA]
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml) rss.php?file=$1&ext=$2
RewriteRule ^(plugin|plugin)/(.*) index.php?url=$1/$2 [L,QSA]
RewriteRule ^search/(.*) index.php?url=/search/$1 [L,QSA]
RewriteRule ^comments/(.*) index.php?url=/comments/$1 [L,QSA]
RewriteRule ^(serendipity\.css|serendipity_admin\.css) index.php?url=/$1 [L,QSA]
RewriteRule ^index\.(html?|php.+) index.php?url=index.html [L,QSA]
RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA]
RewriteRule (.*\.html?) index.php?url=/$1 [L,QSA]

<Files *.tpl.php>
    deny from all
</Files>

<Files *.tpl>
    deny from all
</Files>

<Files *.sql>
    deny from all
</Files>

<Files *.inc.php>
    deny from all
</Files>

<Files *.db>
    deny from all
</Files>

# END s9y
Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Post by dhm »

Hmm,
wenn ich die Adresse zum Blog mit www eingebe,
dann lande ich leider wieder auf der Startseite meiner Website.
Wenn ich sie ohne www eingebe, lande ich ganz normal im Blog

: /
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

"example.net" in der htacess hast Du sicher ersetzt, oder?

Gib mal bitte die URL vom Blog, damit ich mir die Situation ansehen kann.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Post by dhm »

garvinhicking wrote: Gib mal bitte die URL vom Blog, damit ich mir die Situation ansehen kann.
Hast eine PN.
Danke dir :)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Ich schätze, deine .htacces im Root und die .htaccess im s9y Verzeichnis heben sich etwas auf. .htaccess regeln werden ja vererbt, d.h. die root-htaccess gilt auch noch im unterverzeichnis.

Um rauszufinden welche der beiden .htaccess jetzt falsch weiterleitet, probier doch mal folgendes.

root .htaccess:

Code: Select all

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.XXX\.de$ [NC]
RewriteRule ^(.*)$ http://XXX.de/$1 [R=301,L] 
s9y .htaccess:

Code: Select all

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.XXX\.de$ [NC]
RewriteRule ^(.*)$ http://XXX.de/$1 [R=302,L] 
...
Anhand des unterschiedlichen Status kann man dann per LiveHTTPHeader in Firefox rausfinden ob er zu Code 302 oder 301 redirected. Und dann kann man mal schauen warum das so sein könnte.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Post by dhm »

So, habe jetzt die drei Zeilen der .htacces im s9y-Verzeichnis ersetzt (die .htacces im Root war ja schon 301)

Dann habe ich mir livehttpheaders installiert und habe versucht, auf das Blog mit "http://www.example.net/serendipity/" zuzugreifen.
Wurde wie erwartet auf "http://example.net" geleitet.

In dem Log stand dabei folgendes:
HTTP/1.x 301 Moved Permanently
Habe dir sicherheitshalber nochmal das gesamte Log per PN zukommen lassen, falls ich da was falsch verstanden haben sollte, oder so :)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Puh.Irgendwie versteh ich das nicht wirklich. Evtl.hängt's mit dem "DirectoryIndex" zusammen?!

Evtl. kannst Du mal im Webhosting-Forum nachhören, da gibts mehr mod_rewrite Spezis.Wenn Du denen die .htaccess's zeigst haben die vielleichtnoch ne Idee.Ist ja nicht s9y spezifisch...

Viel Erfo,g
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Post by dhm »

Okay.

Vielen Dank jedenfalls!
dhm
Regular
Posts: 45
Joined: Sun Nov 19, 2006 6:11 am

Post by dhm »

So, habe die Lösung (falls jemand auch vor dem selben Problem stehen sollte)

In die .htacces von Serendipity folgendes einfügen:

Code: Select all

RewriteCond %{HTTP_HOST} ^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://example.net/serendipity/$1 [R=301,L]
und zwar vor

Code: Select all

RewriteBase /serendipity/
(also direkt unter "RewriteEngine On")
Post Reply